我想覆盖 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)
除非要覆盖的行的长度具有相同的字节数,否则无法在现有文件中"插入"或"删除"字节。您必须编写一个新文件:
- 读入所有旧行,直到需要覆盖的行,并将它们写入另一个输出流(新文件指针或
stdout
)
将 - 新行写出到输出流
- 读入覆盖的行之后的所有旧行,并将这些行写入新的输出流
如果要覆盖现有字节,并且确定旧行和新行的长度完全相同,则可以:
-
fopen()
rw
模式下
的文件 -
fseek()
到旧行的字节位置(或读入字符,直到达到一些预设数量的换行符等 - 基本上,您希望将文件指针移动到旧行的开头) - 在旧行的字节上
fwrite()
新字节 -
fclose()
文件指针
如果您确实需要覆盖同一文件中的字节,并且新行的字节数比旧行少,则可以做一些技巧,用空格字符覆盖旧行的末尾,直到换行符,但更干净的解决方案是简单地编写一个新文件更新的内容。