使用c ++中的ifstream / ofstream删除文本文件中的特定行

时间:2014-04-23 07:33:33

标签: c++ line

以下是我遇到问题的代码,我有一个.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();
    }

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

    上半部分已完成 - 只需将您读到的内容写出来并删除/重命名,使其成为原始文件。

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