文件處理(C語言)

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是編譯時的運算符,不是函數,不會有產生函數調用開銷的。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章