我正在打开一个文件并获取它的QTextStream。然后我使用readLine()逐行读取流。当该行匹配某个字符串时,我需要用另一个字符串替换它。我需要的行为是线被完全替换(即,如果该行是“longword”并且我将其替换为“word”,则该行应仅包含“word”和“word”)。
目前我正在使用seek()然后使用<<运算符将我的字符串放在给定位置,但最后一个字符串的残余仍然存在,所以我留下了类似“wordword”的东西。如何防止这种情况发生并确保整个上一行完全替换为我的新行?
答案 0 :(得分:1)
据我所知,您不能简单地就地删除一大块文本文件。如果替换字符串的大小相同,您可能可以替换那些确切的字节,如果它更短,您可以通过用空值填充空白空间来解决问题。
如果您不想这样做,则必须创建一个新文件,从旧文件中读取每一行,对内存中的该行进行任何必要的更改,然后将该行写入新文件。完成后,您可以用新文件替换原始文件。
如果可以在文件中添加/删除块,则很可能会在HDD上留下相当碎片的文件。如果您需要插入更多字符,则必须创建额外的片段,因为新数据无法适应旧数据占用的空间量,删除数据会在文件中留下漏洞。