1. 程式人生 > >C語言之檔案操作

C語言之檔案操作

一、開啟檔案

1、函式

  • fopen(path, type)

2、引數介紹

引數 型別 說明 備註
path 字串 檔案路徑 如”./hello.txt”
type 字串 讀寫型別 見下方【讀寫型別說明】
return 指標或EOF 返回值 指標為檔案指標,EOF即為檔案開啟失敗

【讀寫型別說明】

  • “r”
    • 從頭只讀
    • 檔案必須存在
  • “w”
    • 從頭寫入,不讀取
    • 檔案不存在則建立
    • 檔案存在則用空文字覆蓋
  • “a”
    • 從尾寫入,不讀取
    • 檔案不存在則建立
    • 檔案存在則從文字尾部追加文字
  • “r+”
    • 從頭讀寫
    • 檔案必須存在
    • 寫入時,從頭開始覆蓋相應位元組大小的文字,之後的文字內容保留
  • “w+”
    • 從頭讀寫
    • 檔案不存在則建立
    • 檔案存在則優先讀取,寫入之前進行空文字覆蓋
  • “a+”
    • 從頭讀取,從尾寫入
    • 檔案不存在則建立
  • “b”
    • 與上面六種結合,如”wb”、”w+b”、”ab”、”a+b”…
    • 操作物件為二進位制檔案

二、讀取文字

1、函式

  • fgetc(FILE *strem) — 函式
  • getc(FILE *strem) — 巨集定義

2、引數介紹

引數 型別 說明 備註
strem 指標 檔案指標 需要讀取的檔案的指標,即fopen返回的檔案指標
return 整形 返回值 文字對應的整形數

【注】每一次執行函式,檔案指標都會下移一位

三、寫入文字(輸出文字到指定檔案)

1、函式

  • fputc(int c, FILE *strem) — 函式
  • putc(int c, FILE *strem) — 巨集定義

2、引數介紹

引數 型別 說明 備註
c 整形 字元 字元的ASCII碼
strem 指標 檔案指標 需要被寫入的檔案的指標
return 整形 返回值 寫入字元的ASCII碼

四、例子

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp1;
    FILE *fp2;
    int ch;

    // 開啟./hello.txt檔案
    // 因為我不需要對這個檔案做寫入操作,所以選擇 "r"只讀模式
    if ((fp1 = fopen("./hello.txt", "r")) == NULL) {
        printf("開啟檔案失敗!");
        exit(EXIT_FAILURE);
    }

    // 開啟./oceanickang.txt檔案
    // 由於當前目錄下沒有該檔案
    // 我需要建立、寫入並且列印內容檢視效果(即讀取),可以選擇 "w+"或者"a+"
    // 我選擇了"w+",因為覆蓋空文字可以方便後續測試。"a+"在寫入操作時是直接追加文字,不方便測試
    if ((fp2 = fopen("./oceanickang.txt", "w+")) == NULL) {
        printf("開啟檔案失敗!");
        exit(EXIT_FAILURE);
    }

    // 迴圈獲取fp1的文字內容,並寫入fp2
    while((ch = fgetc(fp1)) != EOF) {
        fputc(ch, fp2);
    }

    rewind(fp2); // 初始化fp2的指標指向

    // 迴圈獲取fp2的文字內容,並列印
    while((ch = fgetc(fp2)) != EOF) {
        putchar(ch);
    }

    // 千萬不要忘了關閉檔案!!!
    fclose(fp1);
    fclose(fp2);

    return 0;
}