QTextStream Maniuplation

QTextStream Maniuplation

本文关键字:Maniuplation QTextStream      更新时间:2023-10-16

我正在打开一个文件并获得它的QTextStream。然后使用readLine()逐行读取流。当该行匹配某个字符串时,我需要用另一个字符串替换它。我需要的行为是行被完全替换(即,如果行是"longword",我用"word"替换它,该行应该包含"word"answers"word")。

现在我使用的是seek(),然后是<<操作符将我的字符串放在给定的位置,但是最后一个字符串的残余部分仍然存在,所以我留下了类似"wordword"的东西。我怎样才能防止这种情况的发生,并确保整个以前的行被我的新行完全取代?

据我所知,不能简单地就地删除文本文件的一部分。如果替换字符串的大小相同,您可能能够替换那些精确的字节,如果它更短,您可能能够通过用null填充空白空间来解决问题。

如果您不想这样做,您将不得不创建一个新文件,从旧文件中读取每一行,在内存中对该行进行必要的更改,然后将该行写入新文件。一旦完成,您就可以用新文件替换原始文件。

如果可以在文件中添加/删除块,那么很可能在HDD上留下一个相当碎片化的文件。如果需要插入更多字符,则必须创建额外的片段,因为新数据根本无法容纳旧数据所占用的空间,并且删除数据会在文件中留下漏洞。