在二进制文件中更新学生记录,也删除以前的数据

时间:2014-05-01 03:10:10

标签: c++ oop file-io

我正在尝试通过搜索他的roll no来更新学生记录,然后使用tellg()和seekp()移动到该位置。但每当我尝试覆盖时,它都会删除以前的记录。

int pos=0; 
Student obj;   
ifstream readfile("New.dat",ios::binary);

cout<<"Enter Roll # of student";       
cin>>a;

while(!readfile.eof())
{
    readfile.read((char *) &obj, sizeof(obj));

    if(obj.getRoll()==a)
    {
        if(!readfile.eof())
        {
            pos=readfile.tellg();  
            obj.show();
            cout<<"PLease Enter New Details of Student \n";
            obj.get();
            readfile.close();                
            ofstream file("New.dat",ios::binary);
            file.seekp(pos);
            file.write((char*)&obj,sizeof(obj));  
            cout<<"Student Record Has Been Updated \n";
            countt=1;
        }
    }
}

file.close();

1 个答案:

答案 0 :(得分:0)

您需要记录之前文件中的位置记录,然后您可以返回相同的位置再次将对象写出来。

pos=readfile.tellg();行移至readfile.read行之前。