为什么我的档案是空的?

Why is my file empty?

本文关键字:我的 档案 为什么      更新时间:2023-10-16

为什么我的文件'database2'为空,没有文件被重命名?在注释中说明问题的部分之后,文件'database2'变为0字节。文件'database2'也没有重命名,文件'database'也没有被删除。请帮助我,这是我的代码的一部分:

int edit(){
    char KeyStroke;
    std::string strings;
    string name;
    string name1;
    std::string dummy;
    std::string strings2;
    std::string strings3;
    ifstream myfile;
    ofstream myfile1;
    bool found = false;
    myfile.open("database");
    cout << endl << "What is the name of the contact you wish to go in detail?" << endl;
    getline(cin, name);
    while ( !found && getline (myfile ,strings) ) {
        if (strings.find(name) != std::string::npos) {
            cout << endl << "Name:tt" << strings<<endl;
            std::getline( myfile, strings );
            cout << "Address:t" << strings<<endl;
            std::getline( myfile, strings );
            cout << "Handphone:t" << strings;
        }
    }
    start:
    cout << endl <<endl;
    cout << "What do you wish to edit?"<<endl;
    cout << "1) Name"<<endl;
    cout << "2) Address"<<endl;
    cout << "3) Handphone"<<endl;
    cout << "4) Nothing" << endl;
    myfile.close();

/*--Main part of this code is from here onwards--*/
    lol:
    myfile.open("database");
    myfile1.open("database2");
    KeyStroke = getch();
    switch(KeyStroke){
        case '1':
            cout << "What is the new name: ";
            getline(cin, name1);
            while ( !myfile.eof()) {
                getline (myfile ,strings);
                if (strings.find(name) != std::string::npos) {
                    myfile1 << name1 << endl;
                }
                else{
                    if(strings[0] == ' '){
                        continue;
                    }
                myfile1 << strings << endl;
                }
            }
        myfile1 << " ";
        myfile1.close();        /*Once the file closes here, the data written in earlier dissapears*/
        myfile.close();
        remove("database");
        pause1();
        rename("database2","database");
        goto start;

事情是这样的:

你有一个"循环"与"开始"标签和结束的goto。所以这将是循环的第一部分:

    cout << endl <<endl;
    cout << "What do you wish to edit?"<<endl;
    cout << "1) Name"<<endl;
    cout << "2) Address"<<endl;
    cout << "3) Handphone"<<endl;
    cout << "4) Nothing" << endl;
    myfile.close();

/*--Main part of this code is from here onwards--*/
    lol:
    myfile.open("database");
    myfile1.open("database2");
    cin.get (&KeyStroke,256);

看到在你的循环的第一部分,你打开/创建两个文件名为"database"answers"database2"(注意,ofstream打开方法创建的文件,如果它不存在),然后等待用户输入。

让我们假设用户按1来更改名称,在case 1语句的末尾,你有这样的:

        myfile1 << " ";
        myfile1.close();        /*Once the file closes here, the data written in earlier dissapears*/
        myfile.close();
        remove("database");
//      pause1(); // undefined
        rename("database2","database");
        goto start;

关闭文件,删除数据库,并将databese2重命名为database,这是预期的工作,然后使用goto返回到"循环"的开始,它再次执行这部分代码:

cout << endl <<endl;
cout << "What do you wish to edit?"<<endl;
cout << "1) Name"<<endl;
cout << "2) Address"<<endl;
cout << "3) Handphone"<<endl;
cout << "4) Nothing" << endl;
myfile.close();
lol:
myfile.open("database");
myfile1.open("database2");

你打开数据库文件,因为你把旧的database2重命名为database (database2现在不存在),它创建了一个新的(当然是空的)。

希望能有所帮助。