如何在QT中将文本插入文本文件的中间



我正在编写一个程序,该程序在一个硬件单元上执行多个测试,并记录每个测试的结果和执行测试的步骤。诀窍是我希望程序在它们可用时将这些结果记录到文本文件中,以便在程序崩溃时不会丢失已获得的结果,并且日志可以帮助调试崩溃。

例如,假设一个程序由两个测试组成。如果程序已完成第一个测试并正在处理第二个测试,则日志文件将如下所示:

Results:
Test 1 Result A: Passed
Test 1 Result B: 1.5 Volts
Log:
Setting up instruments.
Beginning test 1.
[Steps in test 1]
Finished test 1.
Beginning test 2.
[whatever test 2 steps have been completed]

第二次测试完成后,日志文件将如下所示:

Results:
Test 1 Result A: Passed
Test 1 Result B: 1.5 Volts
Test 2 Result A: Passed
Test 2 Result B: 2.0 Volts
Log:
Setting up instruments.
Beginning test 1.
[Steps in test 1]
Finished test 1.
Beginning test 2.
[Steps in test 2]
Finished test 2.
All tests complete.

我将如何做到这一点?我一直在查看 QFile 和 QTextStream 的帮助文件,但我没有看到在现有文本中间插入文本的方法。我不想创建单独的文件并在最后合并它们,因为在发生崩溃时我最终会得到单独的文件。我也不想每次进行更改时都从头开始编写文件,因为似乎应该有一种更快、更优雅的方式来执行此操作。

QFile.readAll会将整个文件读入QByteArray。在 QByteArray 上,您可以使用插入在中间插入文本,然后再次将其写回文件。

或者你可以使用经典的c样式,它可以在文件指针的帮助下修改中间的文件。

正如@Roku指出的那样,没有内置的方法可以通过重写将数据插入文件。但是,如果您知道区域的大小,即如果您要写入的文本具有固定长度,则可以在文件中写入空白区域并在以后替换它。检查 此讨论覆盖文件的一部分。

我最终选择了"从头开始编写文件"方法,我在问题中提到了犹豫不决。这种技术的好处是,即使在崩溃的情况下,它也会产生一个文件,因为日志和结果从一开始就不会放在不同的文件中。此外,重写文件仅在添加新结果(很少发生)时发生,而更新日志意味着像往常一样简单地将文本附加到文件中。我仍然有点惊讶,没有办法让操作系统为您将文本插入到文件中。

哦,对于那些绝对必须尽可能高效地拥有此功能的人来说,以下内容可能会有用:http://www.codeproject.com/Articles/17716/Insert-Text-into-Existing-Files-in-C-Without-Temp

您只是无法在文件中间添加更多内容。我会使用两个单独的文件,一个用于结果,另一个用于日志。

最新更新