怎么用C语言对文件操作用特定内容替换其中某些内容
3个回答
展开全部
如果只想修改文件一部分。
可以使用函数int fseek( FILE *stream, long offset, int origin );来定位你的文件指针。
文件指针的位置决定你读写文件的起始位置。
其中参数origin :表示从哪里开始偏移,值有:
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
参数offset:表示偏移的字节数,正数表示正向偏移,负数表示负向偏移。
比如
你先读取文件内容,同时做判断,找到你要改的内容时,调用函数
fseek(fp,10L,SEEK_CUR);把文件指针移动到离当前指针位置10个字节的地方(我们假设当前位置偏移10个字节就是你要修改的起始位置);
这样你之后的读写都是从这个位置开始。
不过要注意的是,你从这位置开始写新的内容,可以覆盖原内容,所以如果新的内容比你想覆盖的内容长的话,会把后面你想保留的内容也覆盖掉。
这种思路,你想要实现修改指定内容,还需要把修改内容之后的数据也读出来备份,再一起写进去。
所以最简单,还是直接生成新的文件替换原文件。
可以使用函数int fseek( FILE *stream, long offset, int origin );来定位你的文件指针。
文件指针的位置决定你读写文件的起始位置。
其中参数origin :表示从哪里开始偏移,值有:
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
参数offset:表示偏移的字节数,正数表示正向偏移,负数表示负向偏移。
比如
你先读取文件内容,同时做判断,找到你要改的内容时,调用函数
fseek(fp,10L,SEEK_CUR);把文件指针移动到离当前指针位置10个字节的地方(我们假设当前位置偏移10个字节就是你要修改的起始位置);
这样你之后的读写都是从这个位置开始。
不过要注意的是,你从这位置开始写新的内容,可以覆盖原内容,所以如果新的内容比你想覆盖的内容长的话,会把后面你想保留的内容也覆盖掉。
这种思路,你想要实现修改指定内容,还需要把修改内容之后的数据也读出来备份,再一起写进去。
所以最简单,还是直接生成新的文件替换原文件。
展开全部
由于操作系统对文件操作做了封装,本来很容易的事情变得很难了。
修改文件最好的,最简单的方法,是新建一个文件,把修改部分前面的,先写入新文件,
然后写入修改的部分,再把后一部分没有修改的,写到新文件中去。然后文件重命名。
原文件改名备份文件,新文件改名原文件。
如果修改的数据很少N~100N KB,N~10N MB 可以用缓冲区处理好修改,再写入文件。
FILE×
fopen
fseek
fwrite
fclose
PS:
1)如果修改的内容,和原文件被修改的数据,字节数完全相同,直接找到要修改的地方,写入新内容就可以了。
2)如果修改后的内容,和原文件被修改的数据,字节数不同,建议新建一个文件,否则很麻烦,要用读写方式打开。
a) 如果修改后数据增加,把修改数据后的所有数据向后移动,给修改的数据腾地方。
b) 如果减少,要把所有数据前移,然后修改文件长度。
修改文件最好的,最简单的方法,是新建一个文件,把修改部分前面的,先写入新文件,
然后写入修改的部分,再把后一部分没有修改的,写到新文件中去。然后文件重命名。
原文件改名备份文件,新文件改名原文件。
如果修改的数据很少N~100N KB,N~10N MB 可以用缓冲区处理好修改,再写入文件。
FILE×
fopen
fseek
fwrite
fclose
PS:
1)如果修改的内容,和原文件被修改的数据,字节数完全相同,直接找到要修改的地方,写入新内容就可以了。
2)如果修改后的内容,和原文件被修改的数据,字节数不同,建议新建一个文件,否则很麻烦,要用读写方式打开。
a) 如果修改后数据增加,把修改数据后的所有数据向后移动,给修改的数据腾地方。
b) 如果减少,要把所有数据前移,然后修改文件长度。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
读入文件到缓冲区,修改缓冲区内容,然后将缓冲区的内容重新写入到文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询