現象:迴圈中多次 fopen 寫入,檔案只有最後一次的資料。
使用 "w" 或 "w+" 模式開啟檔案時,會清空檔案內容(截斷為 0 位元組)。每次迴圈重新開啟都會把前一次寫入的資料覆蓋掉。
| 模式 | 說明 |
|---|---|
r | 唯讀,檔案必須存在 |
w | 唯寫,**建立或清空**檔案 |
a | 附加寫入,**保留原內容**,指標在 EOF |
r+ | 讀寫,檔案必須存在 |
w+ | 讀寫,**建立或清空** |
a+ | 讀寫附加,建立新檔或保留原內容 |
"a" 或 "a+" 模式:每次開啟自動定位到檔案末尾。fclose(效能更好)。FILE* fp = fopen("log.txt", "a"); // 附加模式
for (...) {
fprintf(fp, "第 %d 筆資料\n", i);
}
fclose(fp);
記住:「w 會洗掉檔案,a 才會累積」。