2012-08-14 141 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

相關問題