C語言文件操作
4 人贊了文章
讀取文件
在標準輸入輸出的庫中(stdio.h),還定義了文件操作的方法,那我們就來詳細了解下以下幾個函數,在讀取文件之前,我們要準備好文件,所以,先要打開一個文件
FILE *fopen( const char * filename, const char * mode );
FILE 申明這是一個文件對象
fopen函數當中,第一個函數參數是文件名,以字元形式作為參數,另外一個mode,是文件打開的模式,是讀寫,還是只讀,還是只寫,用這個參數申明,當然,mode參數也是字元形式的,如果程序打開文件失敗,會返回一個NULL(空),若程序沒有在當前目錄下檢測到文件,那麼程序就會創建一個文件,文件名則是我們自己定義的文件名。
例子:
FILE *fp= fopen("a.txt","r");
那麼來解釋下mode參數有哪些形式
- "r" 打開一個文本文件,允許讀取文件。(僅僅是讀取文件,不具備寫操作)
- "r+" 打開一個文本文件,允許讀寫文件。(文件可以讀取,也可以寫入)
- "w" 打開一個文本文件,允許寫入文件。如果文件不存在,則會創建一個新文件。在這裡,您的程序會從文件的開頭寫入內容。如果文件存在,則會被截斷為零長度,重新寫入。(也就是說文件當中即便有內容,也會被覆蓋改寫,僅僅是寫入)
- "w+"打開一個文本文件,允許讀寫文件。如果文件已存在,則文件會被截斷為零長度,如果文件不存在,則會創建一個新文件。(既可以讀取,又可以寫入,當然,它也是覆蓋性地寫入文件)
- "a" 打開一個文本文件,以追加模式寫入文件。如果文件不存在,則會創建一個新文件。在這裡,您的程序會在已有的文件內容中追加內容。(程序會在文件當中寫入新的數據,並且是添加進去,而不是覆蓋性地改寫)
- "a+"打開一個文本文件,允許讀寫文件。如果文件不存在,則會創建一個新文件。讀取會從文件的開頭開始,寫入則只能是追加模式。(同上,只不過文件可讀可寫)
char *fgets( char *buf, int n, FILE *fp );
這個方法是讀取文件當中的字元並且存入緩衝區,而且會在字元串最後添加一個終止字元 也就是字元串的結束符,相當於一句話說完了,加一個句號一樣。
這個方法有三個參數,分別是buf,n,fp。第一個參數buf是文件所要寫入的緩衝區,也就是將數據寫入內存當中的一塊地方,n是要讀取的字元,函數只會讀取n-1個字元,fp是我們設置的文件的文件指針,也就是文件對象,它就是數據的來源,我們所要讀取的目標。當函數讀取的時候,讀取到了比如EOF,換行符(
),程序就會中止讀取。並且只返回讀取的一部分的信息。包括讀取到的換行符,它也會返回到緩衝區。
int fgetc( FILE * fp );
fgetc函數從文件指針所指向的文件中讀取一個字元,發生錯誤就會返回一個EOF,也就是文件的終止符。每一個文件的結尾都會有一個EOF符,在ACSII碼中,它為EOT,碼值是4或者、0x04
細緻的介紹文件結束符的可以看看這個
https://zh.wikipedia.org/wiki/%E6%AA%94%E6%A1%88%E7%B5%90%E5%B0%BEint fscanf(FILE *stream, const char *format, ...)
fscanf函數的功能是從文件指針(*stream)指向的文件當中讀取信息,並且格式化之後返回讀取到的信息,當讀取的過程中遇到錯誤,或者到達文件尾部,那麼函數就會返回EOF。
函數的format格式化有以下幾種格式
- %s 字元串
- %d 整形
- %f 浮點型
- %lf 雙精度的實型
- %c 字元型
特別指出,當使用此函數讀取文件的時候,當你格式化是%s的時候,需要注意,當在文件當中讀取到空格,那麼程序就會中止讀取文件。
例子:
FILE *fp=fopen("1.txt","r+"); //打開一個文件fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);//然後將文件中的信息讀取到內存當中
寫入文件
既然我們知道了讀取文件了,那麼再來了解下寫入文件
int fputc( int c, FILE *fp );
函數fputc()把參數 c 的字元值寫入到 fp 所指向的文件當中。如果寫入成功,它會返回寫入的字元,如果發生錯誤,則會返回EOF。
下面的函數也是寫入數據到文件當中,當然,這會有些不同:
int fputs( const char *s, FILE *fp );
fputs()會把字元串s中存儲的數據寫入到文件指針fp所指向的文件當中,但是不包括空字元,並且當寫入成功後,它會返回一個非零的值,如果出現錯誤,那麼它會返回一個EOF,當前的函數可以寫入以NULL作為結束符的字元串。
當我們操作完成後,要記得把文件進行關閉,使用下面的函數
int fclose(FILE *fp)
關閉*fp所指向的文件。
如果文件成功關閉,那麼就返回一個0,如果關閉失敗,那麼就返回一個EOF
例子:
#include <stdio.h>int main(int argc, char const *argv[]){ FILE *fp = fopen("a1.txt","r+");//打開一個文件,如果沒有這個文件那麼就創建一個 fputs("Hello World",fp); //在文件中寫入一句話 fclose(fp);//關閉文件 return 0;}
int feof(FILE *stream)
feof函數會查找文件指針所指向的文件的結束符,當遇到了結束符則會返回一個非零的值,否則會返回一個零。
例子:
#include <stdio.h>int main (){ FILE *fp; int c; fp = fopen("file.txt","r"); if(fp == NULL) { perror("打開文件時發生錯誤"); return(-1); } while(1) { c = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", c); } fclose(fp); return(0);}
推薦閱讀: