void dispRecords::deleteAcount(int retrieve_AccNo)//根据指定的账号删除newrecords.dat中删除相应的记录
{
fstream filename;
filename.open("newrecords.dat",ios::in); //打开输入流用于读取newrecords.dat
fstream temp;
temp.open("calculations.txt",ios::out); //打开输出流用于创建临时文件calculations.txt
filename.seekg(0,ios::beg);
while(!filename.eof())
{
filename.read((char*)this,sizeof(dispRecords)); //读取一条record;看这写法dispRecords这类应该只有一个char指针或数组的成员变量
if(filename.eof()) //如果已经读完整个文件,退出循环;这里应该去掉,不然最后一条record就永远不可能删掉了
{
break;
}
if(AcountNumber!=retrieve_AccNo) // 如果读到的record的帐号不是要删除的,就写到临时文件calculations.txt里面去
{
temp.write((char*)this,sizeof(dispRecords));
}
}
filename.close(); // 关闭newrecords.dat对应的输入流
temp.close(); // 关闭临时文件calculations.txt对应的输出流
filename.open("newreords.dat",ios::out); // 打开输出流用于写newreords.dat文件;原来的文件应该会被清空
temp.read((char*)this,sizeof(disRecords)); // 从临时文件读取一条record;这行不对,应该删掉并且换成temp.open("calculations.txt",ios::in);
temp.seekg(0,ios::beg);
while(!temp.eof())
{
temp.read((char*)this,sizeof(disRecords)); // 从临时文件读取一条record
if(temp.eof()) // 如果已经读完整个文件,退出循环;这里应该去掉,不然最后一条record就丢了
{
break;
}
filename.write((char*)this,sizeof(disspRecords)); // 把当前record写入newreords.dat
}
filename.close(); // 关闭newrecords.dat对应的输出流
temp.close(); // 关闭临时文件calculations.txt对应的输入流
取消
评论