2011-11-21 127 views
15

我正在嘗試將實現高分的遊戲製作成.txt文件。我的問題是這樣的:當我做一個聲明,如:避免在寫入文件時覆蓋現有文件的內容

ofstream fout("filename.txt"); 

這是否創建該名稱的文件,或者只是尋找與該名稱的文件?

的事情是,每當我重新啓動該程序,並作如下聲明:

fout << score << endl << player; 

它覆蓋我以前的成績!

當我寫入文件時,我有什麼辦法可以使新分數不會覆蓋舊分數嗎?

回答

32

std::ofstream默認情況下會創建一個新文件。您必須使用append parameter創建文件。

ofstream fout("filename.txt", ios::app); 
+3

只是爲了完整性,它是'std :: ios :: app'。 因爲'ios'是'std'命名空間內的命名空間 –

13

如果您只是想追加到文件的末尾,您可以以追加模式打開文件,因此任何寫入都在文件的末尾完成,並且不會覆蓋先前存在的文件的內容:

ofstream fout("filename.txt", ios::app); 

如果你想覆蓋的數據文本的特定行,而不是隻套結他們到端與追加模式,你可能會更好過閱讀文件,並解析數據,然後將其固定起來(添加任何東西,刪除任何東西,編輯任何東西)並將它們全部寫回到文件中。

+0

讀文件,分析和編寫一切恢復是不是一個好主意,如果你的文件非常大,這顯然需要大量的計算能力,如果你的文件說,100GB,更不用說內存和硬盤讀/寫速度。 –