1

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

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

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 的帮助文件,但我没有看到在现有文本中间插入文本的方法。我不想创建单独的文件并在最后合并它们,因为如果发生崩溃,我最终会得到单独的文件。我也不想每次进行更改时都从头开始编写文件,因为似乎应该有一种更快、更优雅的方式来执行此操作。

4

4 回答 4

2

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

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

于 2012-08-14T19:18:23.560 回答
2

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

于 2012-08-14T19:21:00.223 回答
1

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

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

于 2012-08-27T21:22:21.880 回答
0

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

于 2012-08-14T18:31:23.503 回答