【问题标题】:C++ Previous Record Gets deleted when writing a new objectC++ 以前的记录在写入新对象时被删除
【发布时间】: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();

}

【问题讨论】:

    标签: c++ c++11 visual-c++


    【解决方案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();
    

    但这取决于你想要做什么。

    【讨论】:

      猜你喜欢
      • 2013-10-17
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多