檔案的開啟與關閉,讀與寫操作的相關函式,在對檔案操作之前,必須定義一個檔案指標,這樣的話,才能對該檔案進行操作。c語言中的檔案操作相關函式的標頭檔案都是#include

FILE * fp; //可以是任何其他指標名

1)open()函式

函式功能:檔案開啟函式

函式原型:fp=fopen(檔名,使用檔案方式);

FILE *fopen(const char *path,const char *mode); //檔名 模式

函式說明:如果是當前工作目錄下的檔案,可以不用加路徑名,如果是其他目錄下的則需要加路徑

函式引數:以mode的方式開啟或建立檔案

函式返回值:如果成功,將返回一個檔案指標,失敗則返回NULL(其實就是0)

函式注意: 檔名和開啟的方式在寫的時候,必須用雙引號括起來

在 Linux 系統中,mode 裡面的’b’(二進位制)可以去掉,但是為了保持與其他系統的相容性,建議不要去掉。 ab和 a+b 為追加模式,在此兩種模式下,無論檔案讀寫點定位到何處,在寫資料時都將是

在檔案末尾新增,所以比較適合於多程序寫同一個檔案的情況下保

證資料的完整性。

使用檔案的方式如下:

“r”(只讀):為輸入開啟一個

文字檔案

對檔案進行讀操作

“w”(只寫):為輸出開啟一個文字檔案 對檔案進行寫操作

“a”(追加): 向文字檔案尾新增資料

“rb”(只讀): 為輸入開啟有一個

二進位制檔案

“wb”(只寫):為輸出開啟一個二進位制檔案對檔案進行寫操作

“ab”(追加): 向二進位制檔案尾新增資料

“r+”(讀寫): 為讀寫開啟一個文字檔案

“w+”(讀寫):為讀寫建立一個新的文字檔案

“a+”(讀寫): 向文字檔案尾新增資料

“rb+”(讀寫): 為讀寫開啟一個二進位制檔案

“wb+”(讀寫):為讀寫建立一個新的二進位制檔案

“ab+”(讀寫): 為讀寫開啟一個

進位制檔案

模式 讀寫 位置 截斷原內容 建立

rb Y N 檔案頭 N N

r+b Y Y 檔案頭 NN

wb N Y 檔案頭 Y Y

w+b Y Y 檔案頭 YY

ab N Y 檔案尾 N Y

a+b Y Y 檔案尾 N Y

2)fclose()函式

函式功能:檔案的關閉

函式原型:fclose(檔案指標)

int fclose(FILE *stream)

函式返回值

:成功關閉檔案返回值為0,否則返回EOF(-1);

函式說明:使用完一個檔案,以防止再次被誤用,關閉,就是指檔案

指標變數

不再指向該檔案,防止資料丟失

基於檔案指標的讀寫函式很多,可分為資料塊讀寫、格式化讀寫、單個字元讀寫、字串讀寫

3)fread()函式

函式功能:資料塊讀,讀取多個數據

函式原型:size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);

fread(buffer,size,count,fp);

函式說明:fread 從檔案流 stream 中讀取 nmemb 個元素,寫到 ptr 指向的記憶體中,每個元素的大小為 size 個位元組。

函式注意:所有的檔案讀寫函式都從檔案的當前讀寫點開始讀寫,讀寫完以後,當前讀寫點自動往後移動 size*nmemb個位元組

函式返回值:返回為1表示讀取了size個位元組,返回0表示讀取不夠size位元組

4)fwrite()函式

函式功能:資料塊寫,寫入多個數據

函式原型:size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);

fwrite(buffer,size,count,fp)

函式說明: fwrite 從 ptr 指向的記憶體中讀取 nmemb 個元素,寫到檔案流 stream 中,每個元素 size 個位元組

函式返回值:返回所寫的資料塊的數目,nmemb(count)(實際值)

呼叫不成功返回值是0

注意:以上,buffer引數,對fread來說,它是讀入資料的存放地址,對fwrite來說,是輸出資料的地址

示例:

#include

int main()

{

char buf[50] = {‘h’,‘e’,‘l’,‘l’,‘o’};

FILE *p;//定義一個 FILE 結構體型別的指標 p

p = fopen(“a。txt”, “r+b”);//p 這個指標此時就和檔案 a。txt 關聯起來了。

fwrite(buf, 1, 5, p);//把 buf 裡面的內容寫到 p 指向的檔案中。

char buf1[50] = {0};

fread(buf1, 1, 5, p);

printf(“buf1:%s\n”, buf1);

fclose(p);//關閉 p 代表的檔案 a。txt

return 0;

}

注意:在Windows下操作的時候,檔案路徑是

雙反斜槓

”\\”,

因為單個反斜線為轉義符,這樣打不開檔案

#include

int main()

{

char buf[50] = {‘h’,‘e’,‘l’,‘l’,‘o’};

char buf1[50] = {0};

FILE *p;//定義一個 FILE 結構體型別的指標 p

p = fopen(“E:\\信盈達School\\C語言\\2017。02。13全日制C語言\\12第12天連結串列\\5。示例程式碼\\a。txt”, “r+b”);//p 這個指標此時就和檔案 a。txt 關聯起來了。

fwrite(buf, 1, 5, p);//把 buf 裡面的內容寫到 p 指向的檔案中。

fseek(p, 0, SEEK_SET);

fread(buf1, 1, 5, p);

printf(“buf1:%s\n”, buf1);

fclose(p);//關閉 p 代表的檔案 a。txt

return 0;

}

注意:上面的例子就會發現其實並沒有讀到任何內容buf1未顯示出內容

是因為此時檔案指標已經跑到檔案末尾了,可以透過在定義一個

檔案指標

的方式,使其執行檔案開頭,就可以訪問到內容

FILE *fp;//定義一個 FILE 結構體型別的指標 fp

p = fopen(“a。txt”, “r+b”);//fp 這個指標此時就和檔案 a。txt 關聯起來了。

另外一種方式就是檔案定位

fseek函式