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
設(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
刷新流 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 給定的位置。