今天學(xué)習(xí)了C語言文件輸入輸出操作的相關(guān)知識离斩。在此磅叛,向大家分享一下學(xué)習(xí)心得。
fopen()
首先介紹fopen()這個函數(shù)皆辽,以下內(nèi)容為fopen()函數(shù)的詳解:
頭文件:#include <stdio.h>
fopen()是一個常用的函數(shù)柑蛇,用來以指定的方式打開文件。
其原型為: FILE * fopen(const char * path, const char * mode);
【參數(shù)解釋】
path:包含了路徑的文件名驱闷,文件的路徑應(yīng)寫成形如C:\文件夾1\文件夾2\文件.txt耻台,或者/文件夾1/文件夾2/文件.txt的形式。
mode:打開文件的方式
以下是幾種常見的方式:
r:以只讀方式打開文件空另,該文件必須存在盆耽。
r+:以讀/寫方式打開文件,該文件必須存在。
rb+:以讀/寫方式打開一個二進制文件摄杂,只允許讀/寫數(shù)據(jù)坝咐。
rt+:以讀/寫方式打開一個文本文件,允許讀和寫析恢。w打開只寫文件墨坚,若文件存在則長度清為0,即該文件內(nèi)容消失映挂,若不存在則創(chuàng)建該文件泽篮。
w+:打開可讀/寫文件,若文件存在則文件長度清為零柑船,即該文件內(nèi)容會消失咪辱。若文件不存在則建立該文件。
a:以附加的方式打開只寫文件椎组。若文件不存在油狂,則會建立該文件,如果文件存在寸癌,寫入的數(shù)據(jù)會被加到文件尾专筷,即文件原先的內(nèi)容會被保留(EOF符保留)。
a+:以附加方式打開可讀/寫的文件蒸苇。若文件不存在磷蛹,則會建立該文件,如果文件存在溪烤,則寫入的數(shù)據(jù)會被加到文件尾后味咳,即文件原先的內(nèi)容會被保留(原來的EOF符不保留)。
wb:以只寫方式打開或新建一個二進制文件檬嘀,只允許寫數(shù)據(jù)槽驶。
wb+:以讀/寫方式打開或建立一個二進制文件,允許讀和寫鸳兽。
wt+:以讀/寫方式打開或建立一個文本文件掂铐,允許讀寫。
at+:以讀/寫方式打開一個文本文件揍异,允許讀或在文本末追加數(shù)據(jù)全陨。
ab+:以讀/寫方式打開一個二進制文件,允許讀或在文件末追加數(shù)據(jù)衷掷。
fclose()
與fopen()對應(yīng)的是fclose()辱姨,fclose()用來關(guān)閉先前一個fopen()打開的文件. 此動作會讓緩沖區(qū)內(nèi)的數(shù)據(jù)寫入文件中, 并釋放系統(tǒng)所提供的文件資源.
頭文件:#include <stdio.h>
定義函數(shù):int fclose(FILE * stream);
【返回值】
若關(guān)文件動作成功則返回0, 有錯誤發(fā)生時則返回EOF 并把錯誤代碼存到errno.
fwrite()
接下來介紹fwrite()函數(shù),fwrite()函數(shù)的作用是向文件流寫入數(shù)據(jù)戚嗅。
其原型為:fwrite(void * buffer, size, count, FILE * stream);
【參數(shù)解釋】
buffer:數(shù)據(jù)的原地址雨涛,可以通俗理解成需要寫入的內(nèi)容枢舶。
size:每個單元的字節(jié)數(shù)
count:單元的個數(shù)
stream:文件流的指針
注意:一開始接觸這個函數(shù)時很多人不太明白size和count的取值該如何決定。如果所需要輸入的字節(jié)數(shù)為24镜悉,那么size的值可以為4祟辟,count的值可以為6。同樣侣肄,size可以為8旧困,count可以為3〖诠總之吼具,這兩個參數(shù)的乘積最好為所需要輸入的字節(jié)數(shù),若小于這個數(shù)會造成輸入缺失矩距,若多于這個數(shù)會出現(xiàn)不必要的亂碼拗盒。
【返回值】
返回成功寫入的單元個數(shù)。如果小于count锥债,則說明發(fā)生了錯誤陡蝇,文件流錯誤標(biāo)志位將被設(shè)置,隨后可以通過ferror()函數(shù)判斷哮肚。
實例
以下將以一個簡單實例演示如何向文件輸入數(shù)據(jù)登夫,包含了fopen()和fwrite()的用法。
include <stdio.h>
int main()
{
FILE *pFile;//定義文件指針
char str[]="What a wonderful world!";//需要輸入的數(shù)據(jù)
int size = sizeof(str);//用sizeof()函數(shù)得出數(shù)據(jù)的字節(jié)數(shù)
pFile = fopen("testxt", "w");
if(pFile == NULL)//判斷指針是否為空
{
printf("can not open the file");
fclose(pFile);
return 0;
}
fwrite(str,1,size,pFile);
fclose(pFile);
return 0;
}