我打開這樣的檔案(因為它是練習的一部分,可能需要覆寫檔案):
#include <fstream> //std::fstream.
std::fstream file("file.txt", std::ios::in | std::ios::out);
假設我已經閱讀了一個檔案直到最后(到達檔案的末尾)。
std::string tmp_buff;
while(std::getline(file, tmp_buff)) {}
file.seekp(file.tellg());
現在我已經到了流的末尾,如何從這里附加到檔案。因為如果我只是嘗試像定期一樣寫,它會失敗(它實際上不會寫):
file << "Text";
我找到的唯一解決方案是在檔案末尾重新打開檔案:
if(file.eof())
{
file.close();
file.open("file.txt", std::ios::in | std::ios::out | std::ios::app);
file << '\n';
}
任何幫助,將不勝感激。
uj5u.com熱心網友回復:
首先,在使用 a 時不需要宣告std::ios::in和,因為它們在建構式中有默認值。(實際上更準確地說。( ) 繼承自)
所以作業方式相同。std::ios::outfstreamstd::ios_base::in/outstd::iosstd::basic_ios<char>std::ios_basestd::fstream file(filename)
這里的問題是 C 流是如何作業的。
當檔案被完全讀取時,eofbit被設定。之后,另一個讀取發生,這將觸發,failbit因為沒有要讀取的內容并且流的布爾轉換運算子回傳 false 并退出回圈。
這些位將保持打開狀態,直到它們被清除。當它們打開時,流不會做任何事情。
所以要清除它們:
file.clear();
會做這項作業。之后您可以使用流。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/465545.html
上一篇:Spring檔案集成:使用FileWritingMessageHandler寫入檔案時出現錯誤FileSystemException
下一篇:在JAVA中列印到控制臺
