2013-02-20 108 views
0

關於如何在不覆蓋文件的情況下寫入文件有許多問題。如何在不關閉文件的情況下覆蓋文件

但是這一次我需要知道如何打開一個文件,然後寫入一個由少量字符組成的值。該值非常短,但用更新後的值替換文件內容的過程可能會發生十億次。

所以這裏再次提出問題:有沒有辦法通過打開一次文件來寫入這樣的文件,而不是在覆蓋內容之前關閉它多次?

也許如果我告訴你爲什麼我需要這個,它會幫助你給我一個更好的解決方案。 我需要一個仿真器的當前時間寫入一個文件被讀取並通過另一個模擬器(用於同步)

和psudo代碼用於:

int main() { 

    int i = 0; 
std::ofstream myWriteFile; 
ostringstream out; 
myWriteFile.open("text.txt"); 

while (i < 4) {  
    out.str(""); 
    out << currentTime(); 
    myWriteFile << out.str() << std::endl; 
    i++; 
} 

myWriteFile.close(); 
return 0; 
} 

回答

1

位置的「放」指針該文件的寫它使用std::ostream::seekp之前開始:

myWriteFile.seekp(0); 

的「放」指針指定要在文件中寫的位置。寫入內容時會自動遞增,這就是爲什麼連續寫入文件導致數據被追加到先前寫入數據的末尾的原因。

+0

感謝您的回覆。假設將XXXXX寫入文件並使用seekp返回到文件的開頭並寫入YYY。輸出將是YYYXX,而我需要它只是YYY。對?我可以在寫之前刪除內容,但有沒有更好的方法?謝謝 – rahman 2013-02-20 02:11:53

+0

你不能截斷打開的文件。如果你想要的話,你仍然要重新打開它。但是,您可以在其中寫入終止字符,然後另一個模擬器只讀取該字符。例如'\ n'可以工作,在這種情況下,您只會將第一行視爲重要。 – 2013-02-20 02:28:30

+0

是的。我想這是一個好方法。謝謝(我有另一個問題,我會在另一篇文章中提到它) – rahman 2013-02-20 02:35:27

相關問題