用c ++删除文件中的记录

时间:2015-08-05 06:06:34

标签: c++

我有一个代码来添加,删除和显示员工ID,姓名,年龄和地点的员工记录。 但我无法编写删除功能

我的代码如下:

<?xml version="1.0" encoding="utf-16"?>
<Employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <EmployeeId xsi:nil="true" />
</Employee>

1 个答案:

答案 0 :(得分:4)

简单的方法是按员工ID删除。您只需询问员工ID,即可了解要删除的员工。

然后,您无法删除顺序文件中间的行,因此您只需

  • 将文件重命名为document.back
  • 创建新的document.txt
  • 阅读document.back并将所有员工复制到document.txt,但要删除的人除外
  • 关闭两个文件
  • 删除document.back

这就是全部...除了通常的IO错误测试,备份文件存在等等......

我测试了你的代码。首先,您忘记在方法int Document::No_of_lines()中关闭文档。接下来在我的MSVC2008上,我必须在到达文件末尾后明确地调用document.clear()。您也不会在document之后立即测试getline,这意味着您在读取错误后执行代码。

我从newdocument课程中删除了Document,因为恕我直言,这是无用的。以下是Delete

的可能实现
void Document::Delete()
{
    Document d2;
    Display();
    int num;
    document.open("document.txt");
    document.clear();
    d2.document.open("newdocument.txt", ios::out | ios::trunc);
    cout << "Enter the ID to delete \n";
    cin >> idtodelete;
    while (document.good())
    {
        getline(document, data);
        if (document) {
            int n = 0;
            istringstream(data) >> num;
            if (num != idtodelete)
            {
                d2.document << data << endl;
            }
        }
    }
    document.close();
    d2.document.close();
    remove("document.txt");
    rename("newdocument.txt", "document.txt");
}