如何删除文件c ++中的特定行

时间:2018-02-27 13:19:25

标签: c++

我的教授告诉我们创建一个能够添加,列出和删除员工记录的程序,我的问题是我不知道如何从文件中删除记录。我正在使用的代码是它只复制原始文件的内容而不是新内容。

这是我的代码:

string del;
string line;
ifstream in("sample.txt");
if (!in.is_open()) {
    cout << "Input file failed to open\n";
        }
ofstream out("temp.txt")`enter code here`;
cout << "Please Enter the Employee No. to delete" << endl;
cin >> del;
while (getline(in, line)) {
    if (line != del)
        out << line << endl;
}
in.close();
out.close();
remove("sample.txt");
rename("temp.txt", "sample.txt");

3 个答案:

答案 0 :(得分:0)

  

我不知道如何从文件中删除记录。我正在使用的代码是它只复制原始文件的内容而不是新内容。

您无法从文本文件中删除特定行。您只能重写相同的内容,直到要删除到另一个文件的行,跳过要删除的行,继续写其余内容。

完成后,删除原始文件并将新文件重命名为原始文件。

你的代码正在做同样的事情,没关系。

另一种选择是将当前文件内容存储在诸如Vector之类的数据结构中。进行更改,例如删除/添加数据结构。

然后将数据结构的内容写回文件。

答案 1 :(得分:-1)

删除&#39;的一种常见方法。文件中的东西实际上根本不是删除它们,而是设置一个标记来表示它们被删除或者以另一种方式将它们删除。例如,可以使用格式

<valid>:<number>:<name> 
eg 1:123:Dave

然后可以通过将前导1设置为0来删除它。

然后,您可以重写该文件,并在以后删除所有已删除的文件。 另一种方法是用空格填充该行,并允许程序跳过空白行。

答案 2 :(得分:-1)

您需要读取文件并存储在数据结构中,然后执行删除操作并将数据发送到原始文件。

for(int i=0;i<size;i++)
 {
    infile>>vectorObject[i];           
 }
 cin>>del;
 remove(vectorObject[del-1]);
 for(int i=0;i<size;i++)
 { 
    outfile<<vectorObject[i];
  }

根据你的问题,这将有效。