如何在特定时间附加到文件,并在其他时间覆盖它?

问题描述 投票:0回答:1

在我的程序中,我有一个存储名称列表的文件。我还有一种删除这些名称的方法 - 将文件内容写入向量,然后从向量中删除名称,然后将向量的内容写回文件。当用户想要添加名称时,文件会附加它。我的问题是,当我尝试取出一个条目并用剩下的任何内容替换文件时,它会将其附加到文件中。 因此,例如,如果一个名称是 Admin,另一个名称是 User,如果用户试图删除 Admin,则结果如下所示:


-- Admin --

-- User --


-- User --

保留Admin和User,并附加擦除用户的结果

这是我的代码:

    void create_password()
    {
        string holder;
        string keeper;
        vector<string> delete_entry;
        vector<string>::iterator new_end;
        
        ofstream New_PasswordFile(new_password_name + ".txt");//Creates a file called *name*.txt(used to store password for given name)
    ofstream Display_File;          //Saves name to another file, which is diplayed to the user, when they attempt to retrieve a passwords

    //Display file is the file with all of the names
    
    Display_File.open(stored_username + "names.txt", ios_base::app);
    //Appends to the file instead of recreating it.
    ifstream Display_File_Checker(stored_username + "names.txt");
    //Opens same file under different name
    if(is_same_entry != true){//if a new entry is inputed
        Display_File << "\n-- " << new_password_name << " --\n"; //Inputs the new name into the file with -- *name* --
    }
    
    cout<<"WHAT IS THE PASSWORD?"; //Prompts to input password to save to the *name*
    cin >> new_password;
    
    if (new_password == "DELETE"){//if inputed password for given entry is delete
        new_password = "";

        while (getline (Display_File_Checker, holder))
        delete_entry.push_back(holder);//Adds display to vector delete_entry

for (int i = 0; i < delete_entry.size(); i++) { 
    if(delete_entry[i] == "-- " + new_password_name + " --"){
        cout << "working" << endl;
new_end  = remove(delete_entry.begin(), delete_entry.end(), "-- " + new_password_name + " --");

delete_entry.erase(new_end,delete_entry.end()); //erase the entry
    }
    }
    
    //write contents of new_end to entry file
    for (int i = 0; i < delete_entry.size(); i++){
        keeper = delete_entry[i];
cout <<  "keeper :" << keeper << endl; //<< endl;
        Display_File << keeper << endl; //appends instead of overwriting.
    }

    Display_File.close(); 
    }

我尝试不附加到文件,但用户无法添加条目。我不确定是否有办法对此进行编码,或者是否有合乎逻辑的方法来执行此操作。

c++ file append overwrite
1个回答
0
投票

是的,您正在混合几个应该分开的操作。

如果你想就地更新文件——这就是数据库的目的。如果您正在考虑,sqlite3 将是一个很好的解决方案

然而,这里的典型解决方案是:

  1. 将整个文件加载到内存中,可能会加载到(哈希)映射中

  2. 做你需要的操作-增/删/改

  3. 将整个地图写回文件。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.