思路:
1.讀取一行修改一行。 ×
2.利用臨時文件保存修改後的內容,在函數結束的時候將臨時文件替換成原文件。 〇
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "Windows.h"
#include "iostream"
using namespace std;
#define MAXLINE 1024
void ModifyString(char *inStr,char ch,char *outStr)
{
char *tmp;
tmp = outStr;
while(*inStr !='\0')
{
if(*inStr==ch) /* 如果找到要刪除的字符,則跳過該字符 */
{
inStr++;
}
*tmp = *inStr;
tmp++;
inStr++;
}
}
int main()
{
FILE *fp = NULL;
FILE *tempfp = NULL;
char tmpname[MAXLINE] = {0};
char arr[MAXLINE+1] = {0};
char outStr[MAXLINE+1] = {0};
tmpnam(tmpname); //創建臨時文件。
if (((fp = fopen("C:\\123.txt", "r+")) == NULL)
||((tempfp = fopen(tmpname, "w+")) == NULL)) //打開原文件和臨時文件
{
perror ("File open error!\n");
exit (1);
}
while ((fgets (arr, sizeof(arr), fp)) != NULL)
{
memset(outStr,0,sizeof(outStr));
ModifyString(arr,'^',outStr); //修改文件內容
fputs(outStr,tempfp); //將修改後的內容寫入臨時文件
}
fclose(fp);
fclose(tempfp);
remove("C:\\123.txt"); //刪除原文件。
rename(tmpname,"C:\\123.txt"); //用臨時文件替換原文件。
}