思路:
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"); //用临时文件替换原文件。
}