普通文件IO總結 FILE結構體 打開文件fopen函數 文件指針名=fopen(文件名,使用文件方式) eg: 打開方式有: fopen若過出錯則,返回一個NULL可以用作錯誤異常處理的判斷條件; fclose函數 用於關閉當前文件 fclose(FILE*);返回值為0表示正確,非零錯誤。 文件 ...
FILE結構體
typedef struct
{
int level; /*填充/清空一級緩存*/
unsigned flag; /*文件狀態指針*/
char fd; /*文件描述符*/
unsigned char hold; /*ungetc char if no buffer*/
int bsize; /*緩存區大小*/
unsigned char *buffer; /*數據緩衝區*/
unsigned char *curp; /*當前活動指針*/
unsigned istemp; /*臨時文件指示器*/
short token; /*用於有效性檢查*/
}FILE;
打開文件fopen函數
文件指針名=fopen(文件名,使用文件方式)
eg:
FILE *fp; //文件指針
fp=("file a","r"); //以只讀方式打開hzk16
打開方式有:
描述符 | 意義 |
---|---|
“rt” | 只讀打開一個文本文件,只允許讀數據 |
“wt” | 只寫打開或建立一個文本文件,只允許寫數據 |
“at” | 追加打開一個文本文件,併在文件末尾寫數據 |
“rb” | 只讀打開一個二進位文件,只允許讀數據 |
“wb” | 只寫打開或建立一個二進位文件,只允許寫數據 |
“ab” | 追加打開一個二進位文件,併在文件末尾寫數據 |
“rt+” | 讀寫打開一個文本文件,允許讀和寫 |
“wt+” | 讀寫打開或建立一個文本文件,允許讀寫 |
“at+” | 讀寫打開一個文本文件,允許讀,或在文件末追加數 據 |
“rb+” | 讀寫打開一個二進位文件,允許讀和寫 |
“wb+” | 讀寫打開或建立一個二進位文件,允許讀和寫 |
“ab+” | 讀寫打開一個二進位文件,允許讀,或在文件末追加數據 |
fopen若過出錯則,返回一個NULL可以用作錯誤異常處理的判斷條件;
fclose函數
用於關閉當前文件 fclose(FILE*);返回值為0表示正確,非零錯誤。
文件讀寫操作:
·字元讀寫函數 :fgetc和fputc ·字元串讀寫函數:fgets和fputs ·數據塊讀寫函數:freed和fwrite ·格式化讀寫函數:fscanf和fprinf
fgetc(FILR*)與fputc(const char,FILE*)/fputc(char,FILE*):
fgetc每次在文件中讀一個位元組,每讀一次文件內的字元指針往後挪一位,可多次重覆使用依此讀出文件內容。
fput函數每次寫入一個字元,每寫一次文件內指針向後挪動一位,可多次連續使用寫入。
fgets(char* buf, int n, FILE*)與fputs(char* buf, FILE*):
從文件中讀出 n-1 個字元放入buf中
fputs將字元串寫入文件中
fread(cahr* buf, int size, int count,FILE* fp)與fwrite(char* buf, int size, int count,FILE* fp)
fread 從fp中讀入conut個size長度的字元串到buf中
fwirte從buf中讀出count個size個長度的字元串到fp中
fscanf(FILE*, 格式, 列表)和 fprintf(FILE*, 格式, 列表)
eg:
fprintf(fp,"%s %d %d %s",pp->name,pp->num,pp->age,pp->addr);
fscanf(fp,"%s %d %d %s",qq->name,&qq->num,&qq->age,qq->addr);
rewind(FILE*)
將文件內部指針移到文件首
fseek(FILE* fp,int count,int startpoint)
fp 文件指針
count 位移量,表示從startpoint開始計算位移量
startpoint有三種形式:
起始點 | 表示符 | 值 |
---|---|---|
首 | SEEK—SET | 0 |
當前 | SSEEK-CUR | 1 |
尾 | SSEEK-END | 2 |
設置bu模式函數
setbuf 與 setvbuf 指定緩衝區(在讀寫文件之前),將不再使用系統預設的緩衝區
setbuf(fp, NULL) 使得文件不帶緩衝區
setbuf(ffp , NULL, _IONBF , 0 ) 在此情況下與setbuf(fp, NULL)相同
setbuf 中參數:
stream表示操作文件;
buf 緩衝區,;
mode 模式;
size 大小。
setbuffer函數
此函數與setbuf函數類似,好在可自定義buf的大小
此函數等價於setvbuf(fp, (char *) NULL, _IOLBF, 0);
小點:
stdin 0 標準輸入
stdout 1 標準輸出
stderr 2 標準錯誤
_IONBF 無緩衝
_IOLBF 行緩衝
_IOFBF 全緩衝
_IO_LINE_BUF 行緩衝
_IO_UNBUFFERED 無緩衝
對IO普通文件操作整理,有錯誤請指出;
參考: