随机文件访问C ---收缩文件?

时间:2014-05-25 17:40:40

标签: fopen

简单的问题。

我想在磁盘上创建一组记录(数据库是夸大其词)。我可以用rb +打开,用fseek移动到一个随机位置,然后fread和fwrite,全部穿插fflush。好的。

现在我要删除一条记录。 easy ---将最后一条记录移动到我要删除另一条记录的位置,然后将该文件缩短一条记录。

但是......如何缩短现有文件?

/ IAW

3 个答案:

答案 0 :(得分:0)

  1. 将要删除的记录前后的内容复制到 一个临时文件。
  2. 删除原始文件(包含要删除的记录)。
  3. 重命名临时文件 作为原始文件。

答案 1 :(得分:0)

要截断已打开的现有文件,请搜索所需的文件大小,然后在该位置设置新的EOF。问题是C没有用于此目的的功能。您必须使用特定于平台的API,例如Windows上的SetEndOfFile()

答案 2 :(得分:0)

没有ANSI解决方案来解决这个问题,除非重新复制整个文件。

只有特定于操作系统的解决方案。看到答案下的评论。

Windows:SetEndOfFile() Posix:ftruncate()和truncate()