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;
我在这里缺少什么?
答案 0 :(得分:0)
您不应该在copyToBinary
中重新打开该文件。将wFile
作为参数而不是filename
:
...copyToBinary(ostream &file) {
file << *this;
file << endl;
}
并致电...copyToBinary(wFile)
。
答案 1 :(得分:0)
<强>问题:强>
您将名称传递给copyToBinary()
,重新打开流并覆盖它。
<强>解决方案:强>
将wFile流作为参考传递并写入,而不必每次都重新打开
void copyToBinary(ostream& file) {
file << *this;
file << endl;
}
答案 2 :(得分:0)
首先,当您打开文件时
wFile.open(fileName, ios::out | ios::trunc);
每次调用时,现有内容都会因使用trunc
模式而丢失。如果您使用ios::app
模式会更好。因此,无论何时运行上述代码,它都会以附加模式打开文件。
其次,您正在copyToBinary
函数中传递文件名。并使用默认构造函数
ofstream file(fName);
您的文件每次都以默认ios::out
模式启用,但不会以ios::app
模式启用。你传递打开文件的引用或者在函数中打开文件作为追加模式会更好。