檔案的開啟與關閉,讀與寫操作的相關函式,在對檔案操作之前,必須定義一個檔案指標,這樣的話,才能對該檔案進行操作。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函式