1

我正在使用 C++ 开发一个简单的数据库控制台应用程序,用于在 .dat 文件中添加、编辑和删除记录。我已经添加和修改了,我只是发现在这种情况下很难理解删除的概念。下面是我写记录的方法。

写记录

fh.seekp(num*sizeof(customerObj),ios::beg); // Move the write pointer to where rec is
fh.write((char*)&customerObj,sizeof(customerObj)); // Write updated rec

任何想法,而不是write()我可以有等同于delete()...的东西还是不是那么简单?

4

3 回答 3

2

引入删除记录的标记。因此,您需要写入 1 个符号,而不是移动大块文件。当您需要分配新记录时,您可以遍历已删除的并删除标记。

于 2012-05-17T10:27:57.657 回答
2

C 和 C++ 没有删除部分文件的功能。许多操作系统也没有。

可能的选项:

  1. 如果这是最后一条记录,则截断文件。如果没有,则移动(=复制)其后的所有记录,覆盖它,然后截断。或者,您可以将最后一条记录移动(=复制)到它,然后截断。

  2. 创建一个额外的文件并将此记录之前和之后的所有记录复制到其中。然后删除旧文件并重命名新文件。

  3. 将记录标记为未使用。编写新记录时,请检查您是否有任何未使用的位置并首先使用它们。

  4. 每条记录使用一个文件。

于 2012-05-17T10:31:28.240 回答
1

好吧,从文件中删除并非易事,因为您不能直接从文件中删除一行。一种方法是读取整个文件(或批量)并在没有所需行的情况下将其写回。(对于大文件非常健壮且效率不高)。

也许如果你将你的记录文件分成更小的分区文件,那么上面的操作会更有效率。

您可以做的另一件事是将文件中的一行标记为无效(就像删除指针时在内存中所做的那样)并在需要时覆盖它,这当然取决于您如何编写记录,但我希望您明白我的意思。

于 2012-05-17T10:28:45.937 回答