从文件中删除 C++

Deleting from a file C++

好的,这是我目前的删除功能代码。

void classSchedule::deleteEntry(classSchedule schedule[], int numElems)
{
    string entryToDelete;
    cout << endl << "Enter the Teacher's Last Name of the Entry you want to delete: ";
    cin >> entryToDelete;

    int i, recordToDelete = -1;
    for (i = 0; i < numElems; i++)
    {
        if (schedule[i].teacherLastName == entryToDelete)
            recordToDelete = i;
    }
    if (recordToDelete != -1)
    {

    }

}

它本质上是这样的:我有一个名为 schedule[] 的 classes 数组,每个对象都有以下成员:class 部门,class 号码,信用小时数、教师姓氏、教师名字、房间号和当前 GPA。我通过询问他们想要删除的教师姓氏开始我的功能,因为所有其他人都可以重复。我在对象中搜索了那个姓氏。

我想知道如何从文件中删除该对象的整个实例。

我可以直接用前面或后面的对象覆盖它吗?

即他们想从 10 个实例中删除 schedule[4] 我可以用 [5] 覆盖 [4],用 [6] 覆盖 [5] 等等吗?

编辑:

这是正在读取的文件写入(classes.txt):

ENG 112 3 Tetlof S S062 3.1

CST 280 3 Klingler T K114 3.4

LWA 220 2 Wesolak J M121 2.1

POL 103 4 Fortin B J122 4.1

ENG 111 2 Harood J K131 3.1

编辑 2:

void classSchedule::outputToFile(classSchedule schedule[], int& numElems)
{
    ofstream fileOut;

    fileOut.open("classes.txt", ios::out | ios::app);

    fileOut << schedule[numElems - 1].classDepartment
            << " " << schedule[numElems - 1].creditHours
            << " " << schedule[numElems - 1].teacherLastName
            << " " << schedule[numElems - 1].teacherFirstName
            << " " << schedule[numElems - 1].roomWingAndNumber
            << " " << schedule[numElems - 1].currentGPA;
    fileOut.close();
}

你有三种选择:1)将修改后的数据输出到一个新文件中;或 2) 将记录标记为已删除,但可重复使用;或 3) 将数据 "up" 移动到未使用的插槽(如数组)。

也许您应该改用数据库。

许多应用程序将原始数据和修改后的数据写入新文件。要删除的数据不会写入文件。这是最简单的解决方案。

如果您的文件有固定大小的记录,您可以将删除的记录标记为可用,以便再次使用。这可能需要向记录添加一个标志,指示它是死的还是活的。

一个丑陋的方法是用它前面的数据覆盖已删除的数据。例如,如果我有一个包含 3 个句子的文件,我删除了第 2 个句子,我将读取第 3 个句子并将其写入第 2 个句子开始的位置。