2015-06-08 64 views
0

如何在QTextstream的開頭寫入新行?Qt - 在文件開頭重複寫入

我正在追溯一個二叉樹,並將結果寫入日誌文件。我希望根節點成爲列表中的第一行。簡單地追加行會導致相反的順序。我需要做的是在文件頂部添加新行。

下面是什麼我有一個簡單的例子:

QFile mFile("fileName.csv"); 
QTextStream out(&mFile); 
if (!mFile.open(QFile::WriteOnly | QFile::Text)){ 
     qDebug() << " Could not open foundPath file"; 
     return; 
} 

int cursor = 10; 
while (cursor > 0){ 
    out << cursor << "\n"; 
    cursor--; 
} 

結果顯然是10,9,...,1,但我想1,2,...,10

+1

如何反轉該循環或使用堆棧?或者,如果您事先不知道所有行,只需閱讀整個文件,就可以編寫新行並追加內容。 –

+0

我喜歡Qstack的想法。我現在預先做好所有的行(之前的文件是空的),所以我打算使用它。我認爲使用一串字符串而不是一個單一的大字符串通常是一個更好的主意? – derMax

+0

我想一個大字符串會觸發多次重新分配和複製。具有LIFO訂單的單個容器應該會產生更好的性能。 –

回答

2

您不能覆蓋「第一行」,因爲文件不是按行存儲的,而是以字節後的字節存儲的;換行符沒有什麼特別之處。所以,如果你用一個更長的行代替文件的第一行,你將覆蓋第二行的一部分,例如。

可能在整個文件中讀取,並且在重新寫入其餘部分之前預先寫入第一行,但是一旦日誌文件變大,這將非常緩慢並且密集。

正確的做法顯然是扭轉顯示,而不是日誌。

+0

我知道我之前需要寫的所有元素,所以我會按照Marco的想法首先將這些行推入堆棧。 – derMax