C-文件讀寫

C 標準庫 – | 菜鳥教程

1. 打開文件

可以使用?fopen( )?函數(shù)來創(chuàng)建一個新的文件或者打開一個已有的文件,這個調(diào)用會初始化類型?FILE?的一個對象,類型?FILE?包含了所有用來控制流的必要的信息。下面是這個函數(shù)調(diào)用的原型:

FILE *fopen( const char * filename, const char * mode );

filename:

? ? 字符串,文件名

模式描述

r ? ?:打開一個已有的文本文件,允許讀取文件。

w ? ?:打開一個文本文件,允許寫入文件。如果文件不存在,則會創(chuàng)建一個新文件。在這里,您的程序會從文件的開頭寫入內(nèi)容。如果文件存在,則該會被截斷為零長度,重新寫入。

a ? ?:打開一個文本文件,以追加模式寫入文件。如果文件不存在,則會創(chuàng)建一個新文件。在已有的文件內(nèi)容中追加內(nèi)容。

r+ ? :打開一個文本文件,允許讀寫文件。

w+ ? ?:打開一個文本文件,允許讀寫文件。如果文件已存在,則文件會被截斷為零長度,如果文件不存在,則會創(chuàng)建一個新文件。

a+ ? ?:打開一個文本文件,允許讀寫文件。如果文件不存在,則會創(chuàng)建一個新文件。讀取會從文件的開頭開始,寫入則只能是追加模式。

如果處理的是二進制文件,則需使用下面的訪問模式來取代上面的訪問模式:

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

2. 關(guān)閉文件

int fclose( FILE *fp ); // 關(guān)閉流stream,刷新所有的緩沖區(qū)

如果成功關(guān)閉文件,fclose( )?函數(shù)返回零,如果關(guān)閉文件時發(fā)生錯誤,函數(shù)返回?EOF。

3. 寫入文件

int fputc( int c, FILE *fp ); // 成功返回寫入字符,失敗返回EOF

int fputs( const char *s, FILE *fp ); ?//成功返回非負值,失敗返回EOF

int fprintf(FILE *fp,const char *format, ...) ?;

size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); // 二進制的書寫

FILE * fp;?

fp = fopen ("file.txt", "w+");?

fprintf(fp, "%s %s %s %d", "We", "are", "in", 2014);

?fclose(fp);

4. 讀取文件

int fgetc( FILE * fp ); //正確返回讀取的字符,錯誤返回EOF

char *fgets( char *buf, int n, FILE *fp ); ?

函數(shù)?fgets()?從 fp 指向的輸入流中讀取 n - 1 個字符。復(fù)制到緩沖區(qū)?buf,并在最后追加一個?null?字符來終止字符串。

int fscanf(FILE *fp, const char *format, ...) ?;

?函數(shù)來從文件中讀取字符串,但是在遇到第一個空格字符時,它會停止讀取。

size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); // 二進制的讀取,常用于存儲塊的讀取

5. fseek

int fseek(FILE *stream, long offset, int whence);

fseek 設(shè)置當前讀寫點到 offset 處, whence 可以是?

SEEK_SET

SEEK_CUR

SEEK_END 這些值決定是從文件頭、當前點和文件尾計算偏移量 offset。

你可以定義一個文件指針?FILE *fp,當你打開一個文件時,文件指針指向開頭,你要指到多少個字節(jié),只要控制偏移量就好,例如, 相對當前位置往后移動一個字節(jié):fseek(fp,1,SEEK_CUR);?中間的值就是偏移量。 如果你要往前移動一個字節(jié),直接改為負值就可以:fseek(fp,-1,SEEK_CUR)。

只有用?r+?模式打開文件才能插入內(nèi)容,w?或?w+?模式都會清空掉原來文件的內(nèi)容再來寫,a?或?a+?模式即總會在文件最尾添加內(nèi)容,哪怕用 fseek() 移動了文件指針位置。

6. ftell

long int ftell(FILE *stream)

返回給定流 stream 的當前文件位置。

FILE *fp;

? int len;

? fp = fopen("file.txt", "r");

? if( fp == NULL ){

? ? ? perror ("打開文件錯誤");

? ? ? return(-1);

? }

? fseek(fp, 0, SEEK_END);

? len = ftell(fp);

? fclose(fp);

? printf("file.txt 的總大小 = %d 字節(jié)\n", len);

? return(0);

7. rewind

void rewind(FILE *stream)

設(shè)置文件位置為給定流 stream 的文件的開頭。

8. feof

int feof(FILE *stream)?

測試給定流 stream 的文件結(jié)束標識符。?

fp = fopen("file.txt","r");

?while(1){?

? ???c = fgetc(fp);?

? ???if( feof(fp) )?

?? ??????break ;?

? ???printf("%c", c);

?} fclose(fp);

9. fflush

int fflush(FILE *stream)

刷新流 stream 的輸出緩沖區(qū)。

10. fgetpos

int fgetpos(FILE *stream, fpos_t *pos)

獲取流 stream 的當前文件位置,并把它寫入到 pos。

11. fsetpos

int fsetpos(FILE *stream, const fpos_t *pos)

設(shè)置給定流 stream 的文件位置為給定的位置。參數(shù)?pos?是由函數(shù) fgetpos 給定的位置。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容