在我们在完成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;


    }成后关闭文件。