在我们在完成C++课设的过程中,对我来说就是文件操作部分是不容易的。接下来给大家介绍一种很好理解的文件部分内容删除操作。
以我刚完成的通讯录系统为例:
void book::del() {//删除
/*ios::in 为输入(读)而打开文件
ios::out 为输出(写)而打开文件 (filename,openway, )
ifstream, 类似istream, 有一个被称为get pointer的指针,指向下一个将被读取的元素。
ofstream, 类似 ostream, 有一个指针 put pointer ,指向写入下一个元素的位置。
fstream, 类似 iostream, 同时继承了get 和 put
*/
ofstream outData("temp.txt", ios::out);//写入
ifstream inData("person.txt", ios::in);//读取
if(!outData||!inData) {
cout<<endl<<"对不起!!!找不到文件!!!"<<endl;
system("pause");//暂停屏幕
return;
}
string sign; //定义变量
cout<<endl<<"你要删除输入姓名或电话号:";
cin>>sign; //输入变量
bool flag=true;
string str; //定义变量
while(inData>>name>>number) {
getline(inData, str);//getline( istream,string)把一行 读入到string对象中 以换行符结束
if((sign==name)||(sign==number)) {
cout<<endl<<"你想删除的联系人:"<<endl;
.......
flag=false;
break;
}
outData<<......<<<endl;
}
if(flag) {
cout<<endl<<"对不起!!!联系人中没你找的人!!!"<<endl;
} else {
while(getline(inData, str)) {
outData<<str<<endl;
}
outData.close();
inData.close();
ofstream out("person.txt", ios::out);//写入
ifstream in("temp.txt", ios::in);//读取
if(!out||!in) {
cout<<endl<<"对不起不能打开文件!!!"<<endl;
system("pause");
return;
}
while(getline(in, str)) {
out<<str<<endl;
}
out.close();
in.close();
cout<<endl<<"这个人的信息已经从你的通迅录中删除!!!"<<endl;
}
system("pause");
}
原本录入的信息都储存在person.txt中
用户输入要删除的联系人姓名和电话号码,这次的删除操作在开始的时候会以读取的方式打开person.txt,以写入的方式打开temp.txt,用户输入要删除的联系人姓名和电话号码后,用getline读取到并写入到temp.txt中,但会用if语句过滤出姓名和手机号相同的联系人的信息,输出并显示到屏幕上被删联系人的信息,用break终止del()函数中对信息进行筛查的if循环,接着会继续将下面的信息读取并写入temp.txt中此时temp.txt的信息中就没有了被删除联系人的信息,这些操作完成后关闭文件 outData.close();
inData.close();
之后在以写入的方式打开person.txt,以读取的方式打开temp.txt,将temp.txt的信息读取并写入到person.txt文件中,对person.txt的内容进行覆盖,最后删除操作完成后,要及时关闭文件。
ofstream out("person.txt", ios::out);//写入
ifstream in("temp.txt", ios::in);//读取
if(!out||!in) {
cout<<endl<<"对不起不能打开文件!!!"<<endl;
system("pause");
return;
}
while(getline(in, str)) {
out<<str<<endl;
}
out.close();
in.close();
cout<<endl<<"这个人的信息已经从你的通迅录中删除!!!"<<endl;
}成后关闭文件。