c語言檔案的讀取和寫入怎麼操作

2021-07-12 16:00:14

c語言讀取和寫入檔案的方法:1、可以使用fgetc()函數以字元形式讀取檔案,使用fputc()函數以字元形式寫入檔案;2、使用fgetc()函數以字串的形式讀取檔案,使用fputc()函數以字串的形式寫入檔案。

本教學操作環境:windows7系統、c99版本、Dell G3電腦。

1、以字元形式讀寫檔案

以字元形式讀寫檔案時,每次可以從檔案中讀取一個字元,或者向檔案中寫入一個字元。主要使用兩個函數,分別是 fgetc() 和 fputc()。

字元讀取函數 fgetc

fgetc 是 file get char 的縮寫,意思是從指定的檔案中讀取一個字元。fgetc() 的用法為:

int fgetc (FILE *fp);

fp 為檔案指標。fgetc() 讀取成功時返回讀取到的字元,讀取到檔案末尾或讀取失敗時返回EOF。

EOF 是 end of file 的縮寫,表示檔案末尾,是在 stdio.h 中定義的宏,它的值是一個負數,往往是 -1。fgetc() 的返回值型別之所以為 int,就是為了容納這個負數(char不能是負數)。

EOF 不絕對是 -1,也可以是其他負數,這要看編譯器的實現。

fgetc() 的用法舉例:

char ch;
FILE *fp = fopen("D:\\demo.txt", "r+");
ch = fgetc(fp);

表示從D:\\demo.txt檔案中讀取一個字元,並儲存到變數 ch 中。

在檔案內部有一個位置指標,用來指向當前讀寫到的位置,也就是讀寫到第幾個位元組。在檔案開啟時,該指標總是指向檔案的第一個位元組。使用 fgetc() 函數後,該指標會向後移動一個位元組,所以可以連續多次使用 fgetc() 讀取多個字元。

注意:這個檔案內部的位置指標與C語言中的指標不是一回事。位置指標僅僅是一個標誌,表示檔案讀寫到的位置,也就是讀寫到第幾個位元組,它不表示地址。檔案每讀寫一次,位置指標就會移動一次,它不需要你在程式中定義和賦值,而是由系統自動設定,對使用者是隱藏的。

字元寫入函數 fputc

fputc 是 file output char 的所以,意思是向指定的檔案中寫入一個字元。fputc() 的用法為:

int fputc ( int ch, FILE *fp );

ch 為要寫入的字元,fp 為檔案指標。fputc() 寫入成功時返回寫入的字元,失敗時返回 EOF,返回值型別為 int 也是為了容納這個負數。例如:

fputc('a', fp);

或者:

char ch = 'a';
fputc(ch, fp);

表示把字元 'a' 寫入fp所指向的檔案中。

兩點說明:

1) 被寫入的檔案可以用寫、讀寫、追加方式開啟,用寫或讀寫方式開啟一個已存在的檔案時將清除原有的檔案內容,並將寫入的字元放在檔案開頭。如需保留原有檔案內容,並把寫入的字元放在檔案末尾,就必須以追加方式開啟檔案。不管以何種方式開啟,被寫入的檔案若不存在時則建立該檔案。

2) 每寫入一個字元,檔案內部位置指標向後移動一個位元組。

【範例】從鍵盤輸入一行字元,寫入檔案。

#include<stdio.h>
int main(){
    FILE *fp;
    char ch;
    //判斷檔案是否成功開啟
    if( (fp=fopen("D:\\demo.txt","wt+")) == NULL ){
        puts("Fail to open file!");
        exit(0);
    }
    printf("Input a string:\n");
    //每次從鍵盤讀取一個字元並寫入檔案
    while ( (ch=getchar()) != '\n' ){
        fputc(ch,fp);
    }
    fclose(fp);
    return 0;
}

執行程式,輸入一行字元並按確認鍵結束,開啟D槽下的 demo.txt 檔案,就可以看到剛才輸入的內容。

程式每次從鍵盤讀取一個字元並寫入檔案,直到按下確認鍵,while 條件不成立,結束讀取。

2、以字串的形式讀寫檔案

fgetc() 和 fputc() 函數每次只能讀寫一個字元,速度較慢;實際開發中往往是每次讀寫一個字串或者一個資料塊,這樣能明顯提高效率。

讀字串函數 fgets

fgets() 函數用來從指定的檔案中讀取一個字串,並儲存到字元陣列中,它的用法為:

char *fgets ( char *str, int n, FILE *fp );

str 為字元陣列,n 為要讀取的字元數目,fp 為檔案指標。

返回值:讀取成功時返回字元陣列首地址,也即 str;讀取失敗時返回 NULL;如果開始讀取時檔案內部指標已經指向了檔案末尾,那麼將讀取不到任何字元,也返回 NULL。

注意,讀取到的字串會在末尾自動新增 '\0',n 個字元也包括 '\0'。也就是說,實際唯讀取到了 n-1 個字元,如果希望讀取 100 個字元,n 的值應該為 101。例如:

#define N 101
char str[N];
FILE *fp = fopen("D:\\demo.txt", "r");
fgets(str, N, fp);

表示從 D:\\demo.txt 中讀取 100 個字元,並儲存到字元陣列 str 中。

需要重點說明的是,在讀取到 n-1 個字元之前如果出現了換行,或者讀到了檔案末尾,則讀取結束。這就意味著,不管 n 的值多大,fgets() 最多隻能讀取一行資料,不能跨行。在C語言中,沒有按行讀取檔案的函數,我們可以藉助 fgets(),將 n 的值設定地足夠大,每次就可以讀取到一行資料。

寫字串函數 fputs

fputs() 函數用來向指定的檔案寫入一個字串,它的用法為:

int fputs( char *str, FILE *fp );

str 為要寫入的字串,fp 為檔案指標。寫入成功返回非負數,失敗返回 EOF。例如:

char *str = "http://c.biancheng.net";
FILE *fp = fopen("D:\\demo.txt", "at+");
fputs(str, fp);

表示把把字串 str 寫入到 D:\\demo.txt 檔案中。

相關推薦:《C語言視訊教學

以上就是c語言檔案的讀取和寫入怎麼操作的詳細內容,更多請關注TW511.COM其它相關文章!