【发布时间】:2014-04-01 23:02:16
【问题描述】:
我想覆盖 txt 文件中的某一行,同时保持所有其他行不变。有没有一种简单又好用的方法?
【问题讨论】:
-
C write in the middle of a binary file without overwriting any existing content 的可能重复项。尽管对于二进制文件和纯插入,概念基本上是相同的覆盖;您只是移动数据略有不同。
我想覆盖 txt 文件中的某一行,同时保持所有其他行不变。有没有一种简单又好用的方法?
【问题讨论】:
基本上使用 Fseek() 来搜索你想要改变的位序列,
然后使用 Fwrite() 覆盖旧文本
OBS:需要以rw模式打开文件才能覆盖
fopen ("myfile.txt", "wr");
使用这些参考:
http://www.cplusplus.com/reference/cstdio/fwrite/
http://www.cplusplus.com/reference/cstdio/fseek/
(它说的是 C++,但适用于 C)
【讨论】:
fseek 时要小心,因为查找偏移量可能不等于从开始读取到该点的字节数。
除非您要覆盖的行的长度具有相同的字节数,否则您不能在现有文件中“插入”或“删除”字节。您必须编写一个新文件:
stdout)如果您想覆盖现有字节并且您确定新旧行的长度完全相等,那么您可以:
fopen()rw模式下的文件fseek() 到旧行的字节位置(或读入字符,直到您遇到预设数量的换行符等 - 基本上,您希望将文件指针移动到旧行的开头)fwrite() 旧行字节上的新字节fclose()文件指针如果您确实需要覆盖同一文件中的字节,并且您的新行的字节数比旧行少,您也许可以做一些技巧,用空格覆盖旧行的末尾换行符之前的字符,但更简洁的解决方案是简单地编写一个包含更新内容的新文件。
【讨论】:
fseek、fwrite、code sample 等字词。网上已经有很多例子。