2012-02-28 63 views
1

如何以反向順序(逐個字符串)實現對QFile的寫入更好。 使用seek(0)將新字符串寫入舊字符串。在QT中寫入反向文本文件

+0

你想從頭到尾寫入一個文件,還是隻想要反轉一個文本文件? – Spidey 2012-02-28 23:18:50

+0

我需要從頭到尾寫入一個文件。我沒有這個文件,我有一個要寫的數據。 – Funt 2012-02-29 14:33:28

+0

我不認爲這在FS/OS級別上是可行的。您應該首先恢復數據,然後依次寫入。最接近你可以寫回它的地方是填充到最後,搜索每個字節,從結尾到開始,逐字節地寫入。這不是一個好策略,如果你有足夠的內存,你應該把所有內容堆疊起來,然後拆開並寫入每一個內存。 – Spidey 2012-03-01 13:18:48

回答

2

您應該使用QString的QStack。因爲它是一個LIFO(後進先出)容器,我認爲這是你正在尋找的。

按每個字符串,因爲他們來,然後彈出所有字符串:

QStack<QString> stack; 
stack.push("first string"); 
stack.push("second string"); 
stack.push("third string"); 

while (!stack.isEmpty()) 
{ 
    QString string = stack.pop(); 
} 

編輯:(在關於兩個文件評論新的信息寫入)

使用Qvector來存儲所有的QString 。然後在for循環中訪問第一個和最後一個元素,將它們寫入每個文件中。這可以這樣做:

QVector<QString> vector; 
vector.append("first string"); 
vector.append("second string"); 
vector.append("third string"); 

int size = vector.size(); 
for (int i=0; i<size; i++) 
{ 
    QString string1 = vector[0]; // write it in one file 
    Qstring string2 = vector[size-1-i]; // write it in another file 
} 

希望能回答你的問題。

+0

謝謝。 問題是我有幾個QList 。 而且我需要將這些字符串保存兩次,第一次按順序排列第二次。 我想一次寫入兩個文件,不要以相反的順序創建我的字符串的重複項。 Bu似乎沒有其他的方式來收集所有的字符串在一個列表或堆棧中,並按直接和相反的順序兩次讀取列表... – Funt 2012-02-29 11:49:54

+0

因此,你可以使用QVector,因爲你可以直接訪問一個元素。看我的編輯。 – 2012-02-29 19:52:53

0

閱讀全部文件。將其保存到內存中的QStrings矢量中。通過反轉所有字符串的矢量並將該矢量再次保存到文件中。