2012-08-14 117 views
1

我正在编写一个程序,在硬件单元上执行多个测试,并记录每个测试的结果以及执行测试所采取的步骤。诀窍是,我希望程序将这些结果记录到文本文件中,以便在程序崩溃时获得的结果不会丢失,并且日志可以帮助调试崩溃。如何在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的帮助文件,但我没有看到在现有文本中插入文本的方法。我不想创建单独的文件并在最后合并它们,因为如果发生崩溃,我最终会得到单独的文件。我也不想每次修改都从头开始写文件,因为它似乎应该有一个更快,更优雅的方式来做这件事。

回答

1

我最终以“写入文件从头开始”的方法,我提到在我的问题犹豫不决。这种技术的好处在于它可以生成单个文件,即使在发生崩溃时也是如此,因为日志和结果从不放在不同的文件中。此外,仅在添加新结果(偶发事件)时才会重写文件,而更新日志意味着只需像往常一样将文本附加到文件。我还是有点惊讶,没有办法让操作系统为你插入文本到文件中。

哦,对于那些你们谁绝对必须尽可能有效地具有这样的功能,下面可能是使用: http://www.codeproject.com/Articles/17716/Insert-Text-into-Existing-Files-in-C-Without-Temp

0

你只是不能在文件中添加更多东西。我会用两个单独的文件,另一个用于结果,另一个用于日志。

2

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

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

+0

不读入一个QFile实际上从文件中删除文本?你能举一个例子把它重新写回文件,以便文件现在包含以前的文本和修改吗?谢谢! – Rachael 2015-02-16 22:16:14

2

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

+0

是的,这将工作,但我不会建议。包含大量空白“保留”空间的输出文件看起来很糟糕,而且一个非常简单的日志代码可能会变成一个不必要的复杂代码。 – 2012-08-14 19:32:16

相关问题