我有這個文本文件:ANSI C - 文本文件:修改行?
Line 1. "house"
Line 2. "dog"
Line 3. "mouse"
Line 4. "car"
...
我想換2號線的「狗」,在新的生產線2「卡」
我該怎麼辦?
謝謝!
(對不起我的英語不好)
我有這個文本文件:ANSI C - 文本文件:修改行?
Line 1. "house"
Line 2. "dog"
Line 3. "mouse"
Line 4. "car"
...
我想換2號線的「狗」,在新的生產線2「卡」
我該怎麼辦?
謝謝!
(對不起我的英語不好)
您的程序可以是這樣的:
#include <stdio.h>
#include <stdlib.h>
#define MAX_LINE_LENGTH 1000
int main()
{
FILE * fp_src, *fp_dest;
char line[MAX_LINE_LENGTH];
fp_src = fopen("PATH_TO_FILE\\test.txt", "r"); // This is the file to change
if (fp_src == NULL)
exit(EXIT_FAILURE);
fp_dest = fopen("PATH_TO_FILE\\test.txt_temp", "w"); // This file will be created
if (fp_dest == NULL)
exit(EXIT_FAILURE);
while (fgets(line, 1000, fp_src) != NULL) {
if (strncmp(line, "Line 2.", 7) == 0) {
fputs("Line 2. \"cards\"\n", fp_dest);
printf("Applied new content: %s", "Line 2. \"cards\"\n");
}
else {
fputs(line, fp_dest);
printf("Took original line: %s", line);
}
}
fclose(fp_src);
fclose(fp_dest);
unlink("PATH_TO_FILE\\test.txt");
rename("PATH_TO_FILE\\test.txt_temp", "PATH_TO_FILE\\test.txt");
exit(EXIT_SUCCESS);
}
以下的事情采取這一解決方案爲一些生產系統時,您應考慮:
malloc()
動態分配內存一條線的解決方案不能編輯磁盤文件內聯。你必須遵循的過程:
讀取文件數據緩存,(fopen()
- >fread()/fgets()
)
然後刪除舊文件,(unlink()/remove()
)
然後修改數據在緩衝區中,
回寫緩衝區到一個新文件,(fwrite
)
將其重命名爲原始文件。 (rename()
)
示例代碼? – gda2it
@ gda2it:我不相信提供工作代碼。代碼將解決OP的問題,但他可能會選擇不環顧/研究「外來」功能(如「unlink」)的用法,這對他來說將來沒用。他可能會回到這裏再次提出同樣的問題。 –
通常的方法是打開你的文件輸入和一個新的文件輸出。然後處理輸入文件並根據需要創建新文件。關閉這兩個文件後,刪除原始輸入文件並重命名輸出文件。 – pmg