C語言之檔案操作
阿新 • • 發佈:2018-12-09
一、開啟檔案
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;
}