文章來源:http://c.biancheng.net/view/2068.html
在C語言中,讀寫檔案比較靈活,既可以每次讀寫一個字符,也可以讀寫一個字串,甚至是任意位元組的資料(資料塊),本節介紹以字符形式讀寫檔案,
以字符形式讀寫檔案時,每次可以從檔案中讀取一個字符,或者向檔案中寫入一個字符,主要使用兩個函式,分別是 fgetc() 和 fputc(),
字符讀取函式 fgetc
fgetc 是 file get char 的縮寫,意思是從指定的檔案中讀取一個字符,fgetc() 的用法為:
int fgetc (FILE *fp);
fp 為檔案指標,fgetc() 讀取成功時回傳讀取到的字符,讀取到檔案末尾或讀取失敗時回傳EOF,
EOF 是 end of file 的縮寫,表示檔案末尾,是在 stdio.h 中定義的宏,它的值是一個負數,往往是 -1,fgetc() 的回傳值型別之所以為 int,就是為了容納這個負數(char不能是負數),
EOF 不絕對是 -1,也可以是其他負數,這要看編譯器的實作,
fgetc() 的用法舉例:
char ch;
FILE *fp = fopen("D:\\demo.txt", "r+");
ch = fgetc(fp);
表示從D:\\demo.txt檔案中讀取一個字符,并保存到變數 ch 中,
在檔案內部有一個位置指標,用來指向當前讀寫到的位置,也就是讀寫到第幾個位元組,在檔案打開時,該指標總是指向檔案的第一個位元組,使用 fgetc() 函式后,該指標會向后移動一個位元組,所以可以連續多次使用 fgetc() 讀取多個字符,
注意:這個檔案內部的位置指標與C語言中的指標不是一回事,位置指標僅僅是一個標志,表示檔案讀寫到的位置,也就是讀寫到第幾個位元組,它不表示地址,檔案每讀寫一次,位置指標就會移動一次,它不需要你在程式中定義和賦值,而是由系統自動設定,對用戶是隱藏的,
【示例】在螢屏上顯示 D:\\demo.txt 檔案的內容,
#include<stdio.h>
int main(){
FILE *fp;
char ch;
//如果檔案不存在,給出提示并退出
if( (fp=fopen("D:\\demo.txt","rt")) == NULL ){
puts("Fail to open file!");
exit(0);
}
//每次讀取一個位元組,直到讀取完畢
while( (ch=fgetc(fp)) != EOF ){
putchar(ch);
}
putchar('\n'); //輸出換行符
fclose(fp);
return 0;
}
在D盤下創建 demo.txt 檔案,輸入任意內容并保存,運行程式,就會看到剛才輸入的內容全部都顯示在螢屏上,
該程式的功能是從檔案中逐個讀取字符,在螢屏上顯示,直到讀取完畢,
程式第 13 行是關鍵,while 回圈的條件為(ch=fgetc(fp)) != EOF,fget() 每次從位置指標所在的位置讀取一個字符,并保存到變數 ch,位置指標向后移動一個位元組,當檔案指標移動到檔案末尾時,fget() 就無法讀取字符了,于是回傳 EOF,表示檔案讀取結束了,
對 EOF 的說明
EOF 本來表示檔案末尾,意味著讀取結束,但是很多函式在讀取出錯時也回傳 EOF,那么當回傳 EOF 時,到底是檔案讀取完畢了還是讀取出錯了?我們可以借助 stdio.h 中的兩個函式來判斷,分別是 feof() 和 ferror(),
feof() 函式用來判斷檔案內部指標是否指向了檔案末尾,它的原型是:
int feof ( FILE * fp );
當指向檔案末尾時回傳非零值,否則回傳零值,
ferror() 函式用來判斷檔案操作是否出錯,它的原型是:
int ferror ( FILE *fp );
出錯時回傳非零值,否則回傳零值,
需要說明的是,檔案出錯是非常少見的情況,上面的示例基本能夠保證將檔案內的資料讀取完畢,如果追求完美,也可以加上判斷并給出提示:
#include<stdio.h>
int main(){
FILE *fp;
char ch;
//如果檔案不存在,給出提示并退出
if( (fp=fopen("D:\\demo.txt","rt")) == NULL ){
puts("Fail to open file!");
exit(0);
}
//每次讀取一個位元組,直到讀取完畢
while( (ch=fgetc(fp)) != EOF ){
putchar(ch);
}
putchar('\n'); //輸出換行符
if(ferror(fp)){
puts("讀取出錯");
}else{
puts("讀取成功");
}
fclose(fp);
return 0;
}
這樣,不管是出錯還是正常讀取,都能夠做到心中有數,
字符寫入函式 fputc
fputc 是 file output char 的所以,意思是向指定的檔案中寫入一個字符,fputc() 的用法為:
int fputc ( int ch, FILE *fp );
ch 為要寫入的字符,fp 為檔案指標,fputc() 寫入成功時回傳寫入的字符,失敗時回傳 EOF,回傳值型別為 int 也是為了容納這個負數,例如:
fputc('a', fp);
或者:
char ch = 'a';
fputc(ch, fp);
表示把字符 'a' 寫入fp所指向的檔案中,
兩點說明
1) 被寫入的檔案可以用寫、讀寫、追加方式打開,用寫或讀寫方式打開一個已存在的檔案時將清除原有的檔案內容,并將寫入的字符放在檔案開頭,如需保留原有檔案內容,并把寫入的字符放在檔案末尾,就必須以追加方式打開檔案,不管以何種方式打開,被寫入的檔案若不存在時則創建該檔案,
2) 每寫入一個字符,檔案內部位置指標向后移動一個位元組,
【示例】從鍵盤輸入一行字符,寫入檔案,
#include<stdio.h>
int main(){
FILE *fp;
char ch;
//判斷檔案是否成功打開
if( (fp=fopen("D:\\demo.txt","wt+")) == NULL ){
puts("Fail to open file!");
exit(0);
}
printf("Input a string:\n");
//每次從鍵盤讀取一個字符并寫入檔案
while ( (ch=getchar()) != '\n' ){
fputc(ch,fp);
}
fclose(fp);
return 0;
}
運行程式,輸入一行字符并按回車鍵結束,打開D盤下的 demo.txt 檔案,就可以看到剛才輸入的內容,
程式每次從鍵盤讀取一個字符并寫入檔案,直到按下回車鍵,while 條件不成立,結束讀取,
最后
特別推薦一個分享C/C++和演算法的優質內容,學習交流,技術探討,面試指導,簡歷修改...還有超多原始碼素材等學習資料,零基礎的視頻等著你!
還沒關注的小伙伴,可以長按關注一下:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266570.html
標籤:C
