C語言 fopen
的使用方法與實作範例
1. 什麼是 fopen
?
fopen
是 C 語言中用來進行檔案操作的標準函式。當需要讀取或寫入檔案時,會使用這個函式,作為程式與檔案之間的橋樑。打開檔案時需先使用 fopen
,之後才能進行讀寫等操作。
1.1 fopen
的語法與參數
fopen
的基本語法如下:
FILE *fopen(const char *filename, const char *mode);
filename
:指定要開啟的檔案名稱(或路徑)。mode
:指定打開檔案的模式。
1.2 fopen
的模式
根據需求,打開檔案時可以選擇不同的模式:
"r"
:以讀取模式開啟檔案(檔案不存在時會失敗)。"w"
:以寫入模式開啟檔案(檔案若存在內容會被清空,否則新建檔案)。"a"
:以附加模式開啟檔案(檔案不存在時會新建檔案)。"rb"
、"wb"
、"ab"
:以二進位模式進行讀取、寫入、附加。
另外還有 r+
、w+
、a+
等可同時讀寫的模式。每個模式有其特定用途,請根據檔案操作需求選擇合適的模式。

2. fopen
的基本用法
2.1 開啟檔案
以下範例說明如何使用 fopen
開啟檔案:
#include <stdio.h>
int main(void) {
FILE *fp;
// 以讀取模式開啟 test.txt
fp = fopen("test.txt", "r");
if (fp == NULL) {
printf("無法開啟檔案。\n");
return -1;
}
// 開啟成功後的處理
fclose(fp);
return 0;
}
2.2 錯誤處理
當 fopen
開啟檔案失敗時會回傳 NULL
。例如檔案不存在或權限不足等,都可能導致開啟失敗,因此一定要進行錯誤檢查。
if (fp == NULL) {
perror("檔案開啟錯誤");
return -1;
}
2.3 關閉檔案
開啟檔案後,務必要使用 fclose
關閉檔案。若忘記關閉,可能導致記憶體洩漏或檔案資源不足等問題。
fclose(fp);

3. 檔案的讀取與寫入
3.1 讀取檔案
開啟檔案後,可以利用不同方式讀取內容。以下示範使用 fgets
逐行讀取:
#include <stdio.h>
int main(void) {
FILE *fp;
char buffer[256];
// 以讀取模式開啟 test.txt
fp = fopen("test.txt", "r");
if (fp == NULL) {
printf("無法開啟檔案。\n");
return -1;
}
// 逐行讀取
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
printf("%s", buffer);
}
fclose(fp);
return 0;
}
3.2 寫入檔案
要寫入檔案時,先用 fopen
開啟檔案,然後使用 fprintf
或 fputs
寫入資料:
#include <stdio.h>
int main(void) {
FILE *fp;
// 以寫入模式新建 test.txt
fp = fopen("test.txt", "w");
if (fp == NULL) {
printf("無法開啟檔案。\n");
return -1;
}
// 寫入字串
fprintf(fp, "Hello, World!\n");
fclose(fp);
return 0;
}
3.3 檔案追加內容
要在現有檔案末尾追加資料,請使用 fopen
的 "a"
(追加)模式:
fp = fopen("test.txt", "a");
這種模式會保留原有內容並將新資料加在檔案末尾。

4. fopen
的進階應用
4.1 二進位檔案操作
若要操作二進位檔案,請使用 "rb"
或 "wb"
模式。以下為將結構寫入檔案的範例:
#include <stdio.h>
typedef struct {
int id;
char name[50];
} Record;
int main(void) {
FILE *fp;
Record record = {1, "Sample"};
// 以寫入二進位模式建立 data.bin
fp = fopen("data.bin", "wb");
if (fp == NULL) {
printf("無法開啟檔案。\n");
return -1;
}
// 寫入結構體
fwrite(&record, sizeof(Record), 1, fp);
fclose(fp);
return 0;
}
4.2 使用 fopen_s
進行更安全的檔案操作
fopen_s
是出於安全考量而設計的 fopen
安全版本。開啟檔案失敗時會回傳錯誤碼,更方便進行錯誤處理。
errno_t err;
err = fopen_s(&fp, "test.txt", "r");
if (err != 0) {
printf("無法開啟檔案。\n");
return err;
}
使用 fopen_s
可提升程式碼安全性。

5. 常見問題與最佳實踐
5.1 錯誤檢查
操作檔案時務必進行錯誤檢查。不論是 fopen
回傳值,或 fgets
結果,都應確認並適當處理錯誤。
5.2 記憶體管理
操作檔案時,請記得用 fclose
關閉檔案。否則可能導致系統資源耗盡或資料不一致等問題。
5.3 安全性考量
使用 fopen
時,請檢查檔案路徑與存取權限等安全問題。如有需要,也可使用 fopen_s
,進一步提升檔案操作的安全性。
6. 結語
fopen
是 C 語言檔案操作的基礎函式。正確使用並搭配錯誤檢查與安全性措施,可讓檔案操作更加安全且有效率。