iT邦幫忙

5

【從零開始的 C 語言筆記】第二十九篇-讀檔 & 寫檔(1)

Alicia 2021-12-11 16:53:3622585 瀏覽
  • 分享至 

  • xImage
  •  

上一篇我們介紹了Struct這個語法,也大致介紹它的宣告、使用方式,不曉得大家有沒有清楚一些呢!

今天我們來介紹跟實際檔案操作有關的--「讀檔 & 寫檔」的開檔部分!


檔案操作流程

一般來說我們在操作檔案時,會有最基本的兩個動作,就是使用前(要對檔案做任何事情之前)先做開檔的動作「fopen」,以及使用完畢(程式結束前)時也要記得關檔「fclose」,其他看是要讀檔抑或是寫檔則是看需要再進行。

#include <stdio.h>

int main(){
    //開始使用前,設定file文件指針並以w模式開檔
    FILE *fptr;
    fptr = fopen("TheTXT.txt","w");
    
    //寫入檔案
    fprintf(fptr,"this a test txt.");

    //程式結束前閉檔
    fclose(fptr);

    return 0;
}

回傳0,表示程式運行成功。
https://ithelp.ithome.com.tw/upload/images/20211211/201425657hC5fresQ4.png
可以看到在這個文件裡有我們寫入的字串了。
https://ithelp.ithome.com.tw/upload/images/20211211/201425653plnlNjLoi.png


fprintf & printf

其實fprintf跟先前學過的printf(第八篇)很像,其實就是用來寫檔案版本的「printf」,也可以加入格式指定字 & 特殊字元(第七篇),運用上的差別只在於fprintf的第一位參數,必須是對象為文件、檔案的指針,而使用方式與printf並沒有其他不同。

可以看到fprintf的文件聲明

int fprintf(FILE *stream, const char *format, ...)

printf的文件聲明

int printf(const char *format, ...)

其實是沒什麼太大差異的,所以只要熟悉printf的使用方法,fprintf就不是問題啦!不曉得大家有沒有記起來這個小規則了呢,也要記得在使用前開檔,而使用完畢要閉檔喔!


開檔模式介紹

其中比較特別的是我們在使用fopen進行開檔時,需小心的設定好模式,也要注意不同模式下檔案使用的方法不同,而如果來先將不同開檔模式整理在下表的話,會像這樣:

模式 說明 若文件存在 若文件不存在
r 開啟檔案讀取 開檔、指針指向內容開頭 錯誤
w 創建檔案寫入 清除已存在內容、重新指向內容開頭 創建新檔
a 開啟或創建檔案寫至尾端 不影響內容,指向內容之尾(續寫) 創建新檔
r+ 開起檔案讀寫 開檔、指針指向內容開頭 錯誤
w+ 創建檔案讀寫 清除已存在內容、重新指向內容開頭 創建新檔
a+ 開啟、創建檔案讀寫 不影響內容,指向內容之尾(續寫) 創建新檔

還有跟以上模式差不多,但為了**二進位檔案(.dat檔)**的模式:

模式 說明 若文件存在 若文件不存在
rb 開啟二進位檔案讀取 開檔、指針指向內容開頭 錯誤
wb 創建二進位檔案寫入 清除已存在內容、重新指向內容開頭 創建新檔
ab 開啟或創建二進位檔案寫至尾端 不影響內容,指向內容之尾(續寫) 創建新檔
rb+ 開起二進位檔案讀寫 開檔、指針指向內容開頭 錯誤
wb+ 創建二進位檔案讀寫 清除已存在內容、重新指向內容開頭 創建新檔
ab+ 開啟、創建二進位檔案讀寫 不影響內容,指向內容之尾(續寫) 創建新檔

從表中我們可以看到各個模式的操作,也應該可以看出指令的規律了,r相關的指令針對於已存在之檔案,w相關指令則相當於清空重寫。a相關的指令類似於續寫檔案的概念。

另外提醒大家寫檔讀檔真的要小心,尤其是w相關的模式,一不小心把有要讀取內容的檔案弄成這模式會整組不見的!真的要注意使用開檔的模式!


那我們今天大概介紹完檔案讀寫的「開檔」(fopen)部分,希望大家真的在使用檔案時要小心,不要一不小心把文件清光光了,那真的是很哭!

下一篇我們繼續檔案讀寫的「讀」吧!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言