C++ 以前的记录在写入新对象时被删除
Posted
技术标签:
【中文标题】C++ 以前的记录在写入新对象时被删除【英文标题】:C++ Previous Record Gets deleted when writing a new object 【发布时间】:2017-05-29 06:26:57 【问题描述】:我正在尝试从一个类中保存一个对象。当我添加新记录(添加正在保存的新对象)时,以前的记录将被删除。我究竟做错了什么?似乎一旦我添加了一个新对象,之前创建的对象就会因为 idk.已经尝试了几个小时。好像没看懂。
void Department2File(HANDLE screen, Department &Departments, int deptcount)
Department Testing;
fstream file;
file.open("Departmentsdata.dat", ios::out | ios::binary);
file.close();
file.open("Departmentsdata.dat", ios::in | ios::out | ios::binary);
if (!file)
cout << "Error opening file.";
// writting data
long size = (deptcount * sizeof(Departments));
if (deptcount == 0)
size = (deptcount * sizeof(Departments));
else
size = (deptcount * sizeof(Departments))+1;
cout << "\nsaved!" << endl;;
file.clear();
file.seekp(size, ios::beg);
file.write(reinterpret_cast <char *>(&Departments), sizeof(Departments));
file.clear();
file.seekg(size, ios::beg);
file.read(reinterpret_cast<char *> (&Testing), sizeof(Departments));
cout << Testing.DepartmentID;////////////<--------------delete
///////////////////////////////
///////////////DELETE//////////
file.clear();
file.seekg(0, ios::beg);
file.get(reinterpret_cast<char *> (&Testing), sizeof(Departments));
cout <<"\n RECORD 0: "<<Testing.DepartmentID;
////////////////////////////
file.close();
【问题讨论】:
【参考方案1】:在open
函数中添加标志ios::app
以在文件末尾添加输出:
file.open("Departmentsdata.dat", ios::out | ios::app | ios::binary);
查看此链接:http://www.cplusplus.com/doc/tutorial/files/
更新:尝试在您的代码中只使用一个 open:
fstream file;
file.open("Departmentsdata.dat", ios::out | ios::binary);
file.close();
file.open("Departmentsdata.dat", ios::in | ios::out | ios::binary);
像这样:
fstream file;
file.open("Departmentsdata.dat", ios::in | ios::app | ios::out | ios::binary);
//Write Something
file.close();
但这取决于你想要做什么。
【讨论】:
以上是关于C++ 以前的记录在写入新对象时被删除的主要内容,如果未能解决你的问题,请参考以下文章
如何在以前读过的行中找到一些单词并在输出中删除它 - C++ 中的读/写字符串