2017-05-29 57 views
0

我试图从类中保存一个对象。当我添加一个新的记录(添加一个新的对象被保存)之前的记录被删除。我究竟做错了什么?看来,一旦我添加一个新的对象,之前创建的对象被删除,因为idk。一直试着这几个小时。似乎无法弄清楚。C++上一条记录在写入新对象时被删除

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(); 

} 

回答

0

添加标志ios::appopen功能,在文件的最后添加输出:

file.open("Departmentsdata.dat", ios::out | ios::app | ios::binary);

检查此链接:http://www.cplusplus.com/doc/tutorial/files/

UPDATE:尝试在您的代码中只使用一个:

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(); 

但要看是什么你正在尝试做的。