1、C語言把每個文件看成一個有序的字節流,當打開一個文件時,該文件就和某個流關聯起來了。
2、程序執行時會自動打開三種文件和與他們關聯的三種流:標準輸入流/stdin、標準輸出流/stdout、標準錯誤流/stderr。
3、函數feof確定是否到達了文件結尾,參數是一個指向該文件的指針。
feof(stdin): 輸入流stdin所指向的文件(應該是存儲鍵盤打入信息的)是否鍵入了文件結束指示符,如果是,函數爲真
如:while(!feof(stdin)) {....;....;scanf("%d",&num); } 如果沒有輸入結束文件的組合鍵時,該循環繼續。
如:FILE * Ptr; Ptr=fopen(...); while(!feof(Ptr)) {....} 如果Ptr指向的文件沒有到結尾,循環繼續。
4、fgetc/fputc :從文件中讀取/寫入一個字符。 // fputc(int x,FILE * x) fputc(100,ptr); 即寫入字符d
5、fgets/fputs:從文件中讀取/寫入一行數據。 //fputs(const char *,FILE *) fputs("\nxiewen",ptr);即另起一行寫入字符串xiewen
6、fopen用來打開一個文件(如xxx.txt或xxx.dat文件),並返回一個指向FILE結構的指針。
FILE *ptr;
ptr=fopen("file.txt","參數");
注:有時fopen會出現warning或者error,提醒用fopen_s來代替,解決方法:C/C++->預處理器-》預處理器定義 加上_CRT_SECURE_NO_WARNINGS
參數:
“w”模式:寫入數據之前建立一個文件或廢棄某個文件的內容,以寫入方式打開它。//應該不能讀取內容吧
“r”模式:讀取某個現有的文件,以讀方式打開它。//應該不能寫內容吧。不會新建一個文件,必須是現有的
“a”模式:在現有文件的尾部追加記錄,以追加方式打開它。 //文件沒有會新建一個文件
要打開用於讀和寫的文件,用如下三種模式:
“w+”模式:建立一個用於讀寫的文件,如果存在,打開它並廢棄當前的內容。//不管是新建或清除內容,都是重新寫入新東西的
“r+”模式:以讀寫方式打開一個供讀寫的文件。 //打開已有文件,並進行讀或寫。 不會新建一個文件,必須是現有的
“a+”模式:以讀寫方式打開一個供讀寫的文件,所有的寫入都追加到文件尾部。 //文件沒有會新建一個文件
7、函數fprintf(ptr,"%d",num); 向ptr指向的文件中打印數據
8、函數fscanf(ptr,"%d",num); 從ptr指向的文件中讀取數據
9、函數rewind(ptr); 將文件位置指針重新定位到文件起始位置
前面都是順序存取的,隨機存取文件要要求記錄數據具有固定的長度。
10、函數fwrite(&num,sizeof(int),1,ptr); 向ptr指向的文件中寫入定長sizeof(int)*1的num數據
fwrite(&client,sizeof(struct clientData),1,ptr);
11、函數fseek(ptr,(account-1)*sizeof(struct clientData), SEEK_SET); 將ptr移位到某個位置,即指向新的位置,位移量(offset)就是中間給出的。
SEEK_SET表示位移量相對於文件起始位置。
SEEK_CUR表示位移量相對於文件當前位置。
SEEK_END表示位移量相對於文件尾部位置。
12、函數fwrite(&client,sizeof(struct clientData),1,ptr); 將ptr指向的位置,大小爲sizeof(struct clientData)讀入client中
易錯點:
1、以“w”模式打開一個用戶想保留數據的現有文件。這會導致廢棄文件的內容,而且不給與任何提示的。
2、用正確的文件指針調用文件處理函數,別用錯指針。
3、明確地關閉程序中不再引用的文件。
4、如果不修改文件的內容,就以只讀方式打開它。如“r”模式
注:
sizeof是編譯時的運算符,不是函數,不會有產生函數調用開銷的。