#include<iostream.h>
#include<stdlib.h>
#include<fstream.h>
#include<string.h>
#include <stdio.h>
struct classmate
{
char name[20];
char sex[8];
char borntime[20];
char bornaddress[20];
char homeaddress[40];
char postnumber[20];
char phonenumber[20];
int m;
};
char filename[20]="f:\\classmate.dat";
void delestu(fstream f) // 删除学生文件中指定姓名的记录。
{
char nam[20]; //工作变量,
classmate t;
cout<<"要删除的学生姓名:"; cin>>nam; cout<<endl;
t=search( f, nam);
if(t.m==-1)
{
cout<<"无此学生!"<<endl; return;
}
else
{
ofstream iofile(filename,ios::binary|ios::out);// 二进制写方式打开文件
if(!iofile){ cout<<"文件temp.dat打开失败"<<endl; return;}
f.seekg(0,ios::beg); // 读指针移动到文件头。
f.read((char*)&t,sizeof(classmate)); // 读一个学生的信息。
while(!f.eof())
{
if(strcmp(t.name,nam)!=0) //当前读出的记录不是要删除的记录
{
iofile.write((char*)&t,sizeof(classmate)); // 写一个学生的信息
f.read((char*)&t,sizeof(classmate)); // 再读一个学生的信息
}
else f.read((char*)&t,sizeof(classmate)); // 忽略要删除的记录,读下一个学生的信息
}
iofile.close(); // 关闭临时文件,文件关闭后才能改名。
f.close(); //关闭原文件,文件关闭后才能删除。
remove(filename); //删除旧文件。
cout<<"删除成功!"<<endl;
rename("f:\\temp.dat",filename); //用旧文件名重新命名临时文件。
f.open(filename,ios::binary|ios::in|ios::out); //打开删除了记录后的文件。
}
}
为什么会一下删除我的全部记录????????????????????????????