C語言文件操作
文件操作
文件的打開
FILE * fopen(const char filename,const char * mode);
文件的打開操作 fopen 打開一個文件
(幾種操作文件的組合)
文件的關閉操作
int fclose(FILE *fp);
fclose 關閉一個文件
文件的讀寫操作
讀取單個字符
fgetc 從文件中讀取一個字符 int fgetc(FILE * fp);
fputc 寫一個字符到文件中去 int fput(int c,FILE * fp);
讀取字符串
fgets 從文件中讀取一個字符串 char * fgets(char * s,int n,FILE *fp);
從文件中讀取字符串並在字符串末尾添加‘\0‘,然後存入s,最多讀入n-1個字符
當讀到換行符、到達文件末尾或者讀滿n-1個字符,函數返回該字符串的首地址
讀取失敗返回空指針NULL
因為出錯和到達文件末尾都返回NULL,因此應該使用feof()和ferror()來確定函
數fget()返回NULL的實際原因
fgets()從指定的流讀字符串,讀到換行符時將換行符也作為字符串的一部分讀到
字符串中來
fputs 寫一個字符串到文件中去 int fputs(const char * s,FILE *fp);
出現寫入錯誤返回EOF,否則返回一個非負數
fputs()不會在寫入文件的字符串末尾加上換行符
按格式讀寫文件
fprintf 往文件中寫格式化數據 int fprintf(FILE * fp,const char * format,...)
第一個參數為文件指針,第二個參數是格式控制參數,第三個是輸出參數列表
fscanf 格式化讀取文件中數據 int fscanf(FILE * fp,const char * format,...)
第一個參數為文件指針,第二個參數是格式控制參數,第三個是地址參數列表
按格式讀寫文件需要知道輸出和地址參數,比較麻煩(個人認為)
按數據塊讀寫文件
fread 以二進制形式讀取文件中的數據
unsigned int fread(void * buffer,unsigned int size,unsigned int count,FILE * fp)
從fp所指的文件中讀取數據並存儲到buffer所指向的內存中
buffer待讀入數據塊的起始地址
size每個數據塊的大小(待讀入每個數據塊的字節數)
count最多允許讀取數據塊的個數
函數返回的是實際讀到的數據塊個數
fwrite 以二進制形式寫數據到文件中去
unsigned int fread(void * buffer,unsigned int size,unsigned int count,FILE * fp)
buffer待輸出數據塊的起始地址
size每個數據塊的大小(待讀入每個數據塊的字節數)
count最多允許讀取數據塊的個數
函數返回的是實際讀到的數據塊個數
這兩個函數常於二進制文件的輸入和輸出
getw 以二進制形式讀取一個整數
putw 以二進制形式存貯一個整數
文件狀態檢查函數
feof 文件結束 int feof(FILE * fp);
ferror 文件讀/寫出錯 int ferror(FILE *fp);
文件出現錯誤函數返回非0值,否則,函數返回0
clearerr 清除文件錯誤標誌
ftell 了解文件指針的當前位置 long tell(FILE * fp);
成功返回文件當前讀寫位置,否則返回-1L
文件定位函數
rewind 反繞重置位置指針到文件首部 void rewind(FILE * fp);
fseek 隨機定位 int fseek(FILE *fp,long offset,int fromwhere);
功能:將fp的文件位置指針從fromwhere開始移動offset個字節指示下一個要讀取的位置
offset(偏移量)為正向後移動 為負向前移動 要求為長整型數據(常量數據後面要加L)
fromwhere有三種取值:SEEK_SET/0表示文件來時處 SEEK_CUR/1表示文件當前位置 SEEK_END/2表示文件結尾處
補充:
int fflush(FILE * fp);
無條件地把緩沖區的所有數據寫入物理設備
C語言文件操作