#include <string.h>
#include <math.h>
int main()
{
char filename[10],string1[15],string2[15],line[100]
液枝
FILE *pfile=NULL
scanf("%s %s %s",filename,string1,string2)
pfile=fopen(filename,"r+")
if(!pfile)
{
perror("文件不存在")
吵盯return 1
}
printf("将把文件%s中字符串%s替换成%s\n",filename,string1,string2)
while(!feof(pfile))
{
char *index=NULL
fgets(line,100,pfile)
index=strstr(line,string1)
if(index)
{
int d2=strlen(string2)
int d1=strlen(string1)
printf("%s 中有%s\n"升埋和,line,string1)
if(d1!=d2)
{
memmove(
index+d1+d2-d1,
index+d1,
strlen(line))
}
memcpy(index,string2,strlen(string2))
fseek(pfile,-strlen(line)+d2-d1,SEEK_CUR)
fputs(line,pfile)
fflush(pfile)
}
}
fclose(pfile)
return 0
}
#include <stdio.h>int main()
{
FILE *in, *out
char ch
if((in = fopen("d:\\1.txt", "r")) == NULL)
{
printf("无法打开输伏裤入文件!\n")
return 1
}
if((out = fopen("d:\\2.txt", "w")) == NULL)
{
printf("无法打开陪运输出文件!\n")
return 2
}
while((ch = getc(in)) != EOF)
if(ch == '\t')
fprintf(out, "芦厅梁----")
else
putc(ch, out)
fclose(in)
fclose(out)
return 0
}
由于 *** 作系统对文件 *** 作做了封装,本来很容易的事情变得很难了。修改文件最好的,最简单的方法,是新建一个文件,把修改部分前面的,先写入新文件,
然后写入修改的部分,再把后一部分没有修改的,写到新文件中去。然后文件重命名。
原文件改名备份文件,新文件改名原文件。
如果修改的数据很袭仔少N~100N KB,N~10N MB 可以用缓冲区处理好修改,再写入文件。
FILE×
fopen
fseek
fwrite
fclose
PS:隐禅橡
1)如果修改的内容,和原文件被修改的数据,字节数完全相同,直接找到要修改的地方,写入新内容就可以了。
2)如果修改后的内容,和原文件被修改的数据,字节数不同,建议新建一个文件,否则很麻烦灶旁,要用读写方式打开。
a) 如果修改后数据增加,把修改数据后的所有数据向后移动,给修改的数据腾地方。
b) 如果减少,要把所有数据前移,然后修改文件长度。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)