1. 程式人生 > >C文件讀寫操作小節

C文件讀寫操作小節

color 執行 gree user use 格式化 width 打開 sans


一.文件打開

  使用 fopen( ) 函數來創建一個新的文件或者打開一個已有的文件,這個調用會初始化類型 FILE 的一個對象,類型 FILE包含了所有用來控制流的必要的信息。函數原型為:

FILE *fopen( const char * filename, const char * mode );

  函數原型中的第一個參數為文件名,第二參數為打開模式。模式可以有r(允許讀取),w(允許寫入),a(允許追加)等。文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。現在為了安全考慮,很多編譯器都建議使用fopen_s()函數代替fopen()函數。函數原型為:

errno_t fopen_s( FILE** pFile, const char *filename, const char *mode );

代碼示例

#include <stdio.h>

int main()
{
    FILE *stream_1,*stream_2;

    stream_1 = fopen("C:\\Users\\greenhat\\Desktop\\文檔\\test1.txt", "r+");

    errno_t err = fopen_s(&stream_2,"C:\\Users\\greenhat\\Desktop\\文檔\\test2.txt
", "r+"); return 0; }

  上述運行後會在C:\\Users\\greenhat\\Desktop\\文檔\\目錄下產生test1.tex和test2.txt兩個文件,"r+"表示該文件允許讀寫操作。

 

二.文件關閉

  使用fclose()函數關閉文件,如果成功關閉文件,fclose()函數返回為零,如果關閉文件時發生錯誤,函數返回 EOF函數原型為:

int fclose( FILE *fp );

三.文件寫入

  函數 fputc() 把參數 c 的字符值寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回寫入的字符,如果發生錯誤,則會返回 EOF

。函數原型為:

int fputc( int c, FILE *fp );

  函數 fputs() 把字符串 s 寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回一個非負值,如果發生錯誤,則會返回 EOF。數原型為:

int fputs( const char *s, FILE *fp );

  函數fprintf()把一個字符串寫入到文件中,根據指定的format(格式)發送信息(參數)到由stream(流)指定的文件.。 fprintf()的返回值是輸出的字符數,發生錯誤時返回一個負值。函數原型為:

int fprintf( FILE *stream, const char *format, ... );

代碼示例

#include <stdio.h>

int main()
{
    FILE *stream;
    errno_t err = fopen_s(&stream,"C:\\Users\\greenhat\\Desktop\\文檔\\test.txt", "w+");
    fprintf(stream, "測試函數fprintf輸出... \n");
    fputs("測試函數fputs輸出... \n", stream);
    fclose(stream);

    return 0;
}

打開文件test.txt可以看到以下結果:

測試函數fprintf輸出... 
測試函數fputs輸出... 


四.文件讀取

  函數fgetc() 從 fp 所指向的輸入文件中讀取一個字符。返回值是讀取的字符,如果發生錯誤則返回 EOF。函數原型為:

int fgetc( FILE * fp );

  函數 fgets() 從 fp 所指向的輸入流中讀取 n - 1 個字符。它會把讀取的字符串復制到緩沖區,並在最後追加一個NULL字符來終止字符串。如果這個函數在讀取最後一個字符之前就遇到一個換行符 ‘\n‘ 或文件的末尾 EOF,則只會返回讀取到的字符,包括換行符。函數原型為

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

  函數fscanf()從一個流中執行格式化輸入,成功返回讀入的參數的個數,失敗返回EOF(-1)。fscanf()遇到空格和換行時結束,註意空格時也結束。這與fgets()有區別,fgets(0)遇到空格不結束。函數原型為:

int fscanf(FILE*stream,constchar*format,[argument...]);

  為安全期間,現在一般用fscanf_s()函數代替fscanf函數。
代碼示例

#include <stdio.h>

int main()
{
    FILE *fp;
    char buff[255];


    errno_t err = fopen_s(&fp, "C:\\Users\\greenhat\\Desktop\\文檔\\test.txt", "r");
    fscanf_s(fp, "%s", buff,255);
    printf("1 : %s\n", buff);

    fgets(buff, 255, (FILE*)fp);
    printf("2: %s\n", buff);

    fgets(buff, 255, (FILE*)fp);
    printf("3: %s\n", buff);
    fclose(fp);

}

當原來文件中存儲的內容如下

Hello world!
How are you!

運行完上述代碼後,結果如下
技術分享圖片

  從運行結果可以看出,函數fprintf()讀取遇到空格時讀取結束,然後fgets()函數繼續讀取,直到遇到回車符。最後一個fgets()函數從第二行開始讀取到末尾。

C文件讀寫操作小節