我正在编写一个程序,在硬件单元上执行多项测试,并记录每项测试的结果和执行测试所采取的步骤。诀窍是我希望程序将这些结果记录到文本文件中,因为如果程序崩溃,结果已经没有丢失,日志可以帮助调试崩溃。
例如,假设一个程序由两个测试组成。如果程序已完成第一个测试并且正在处理第二个测试,则日志文件将如下所示:
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的帮助文件,但我没有看到在现有文本中间插入文本的方法。我不想创建单独的文件并在最后合并它们,因为在崩溃的情况下我最终会得到单独的文件。每次进行更改时我也不想从头开始编写文件,因为看起来应该有更快,更优雅的方式。
答案 0 :(得分:2)
QFile.readAll会将整个文件读入QByteArray。 在QByteArray上,您可以使用insert在中间插入文本, 然后再将其写回文件。
或者您可以使用经典的c样式,可以在文件放大器的帮助下修改中间的文件。
答案 1 :(得分:2)
正如@Roku指出的那样,没有内置的方法可以在重写的文件中插入数据。但是,如果您知道区域的大小,即,如果要写入的文本具有固定长度,则可以在文件中写入空格并稍后替换它。校验 this讨论覆盖文件的一部分。
答案 2 :(得分:1)
我最后选择了“从头开始编写文件”的方法,我提到在我的问题中犹豫不决。这种技术的好处是它可以生成单个文件,即使在崩溃的情况下也是如此,因为日志和结果永远不会放在不同的文件中。此外,仅在添加新结果(不经常发生)时才会重写文件,而更新日志意味着只需像往常一样将文本附加到文件中。我仍然有点惊讶,没有办法让操作系统为你插入文件。
哦,对于那些绝对必须尽可能高效地使用此功能的人,可能会使用以下内容: http://www.codeproject.com/Articles/17716/Insert-Text-into-Existing-Files-in-C-Without-Temp
答案 3 :(得分:0)
您无法在文件中间添加更多内容。我会选择两个单独的文件,另一个用于结果,另一个用于日志。