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 個字符。復制到緩沖區(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 給定的位置蚌铜。