使用c++中的istream/ofstream删除txt文件中的特定行

Deleting a specific line in a txt file using istream/ofstream in c++

本文关键字:文件 txt 删除 中的 c++ istream ofstream 使用      更新时间:2023-10-16

这是我遇到问题的代码,我有一个.txt文件,其中包含使用以下格式的用户及其密码列表:user;password。我需要在文件中搜索一个用户,然后删除包含该用户的行。

    void deleteauser()
    {
    string user;
    cout<<"Which user do you wish to delete?";
    cin>>user;
    string line;
    string delimiter=";";
    string token,token1;
    ifstream infile;
    infile.open("users.txt",ios::in); 
    while (getline(infile,line,'n'))
    {
        token = line.substr(0, line.find(delimiter));
        token1=line.substr(token.length(), line.find('n'));
        if(token==user)
        {
                 //here  i need to delete the line of the user that has been found
        }   
    }
    infile.close();
    }

逐行读取输入文件,写入临时文件。当你找到不想要的行时,不要把它们写到临时文件中。完成后,将临时文件重命名为实际文件。

要编辑文件,有两个选项:

  1. 读每一行,写下你想保留的
  2. 查找要删除的文件部分,并用空格(或类似内容)替换文本

你已经完成了前半部分——只需将你读到的内容写到一个临时文件中,然后删除/重命名以使其成为原始文件。

对于第二个选项,如果使用iofstream(注意缓冲问题),则可以在此时写入输入文件。更好的选择是在覆盖文件之前使用seekp或seekg到达正确的点。