[英]Writing/reading in to binary/text files
wFile.open(fileName, ios::out | ios::trunc);
if (!(wFile.is_open()))
{
cout << "Error in opening the file" << endl;
return false;
}
else
{
for (unsigned int i = 0; i < Widgets.size(); i++)
{
Widgets.at(i)->copyToBinary(fileName);
}
wFile.close();
return true;
}
我正在嘗試從矢量復制不同的對象類型。 我的問題是,當此代碼為副本運行時,它僅復制最后一個對象。 似乎代碼只是覆蓋了現有文本。
另外,我在每個類中都有此代碼(這是copyToBinary函數):
ofstream file(fName);
file << *this;
file << endl;
我在這里想念什么?
您不應該在copyToBinary
重新打開文件。 將wFile
作為參數而不是filename
傳遞:
...copyToBinary(ostream &file) {
file << *this;
file << endl;
}
並調用...copyToBinary(wFile)
。
問題:
您將優良copyToBinary()
傳遞給copyToBinary()
,重新打開流並覆蓋它。
解:
傳遞wFile流作為參考並寫入它,而無需每次都重新打開
void copyToBinary(ostream& file) {
file << *this;
file << endl;
}
首先,當您打開文件時
wFile.open(fileName, ios::out | ios::trunc);
每當您使用trunc
模式時,現有內容都會丟失。 如果使用ios::app
模式會更好。 這樣,只要上述代碼運行,它就會以附加模式打開文件。
其次,您要在copyToBinary
函數中傳遞文件名。 並且通過使用默認構造函數
ofstream file(fName);
您的文件每次都在默認ios::out
模式下打開,但不在ios::app
模式下打開。 最好是通過打開文件的引用,或者以附加模式打開文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.