将文本前置到C中的文件

时间:2012-11-14 18:27:39

标签: c file io

我想使用C向文件(或文件组)添加标准头文件。这些文件可能非常大,因此将它们加载到内存中或将它们复制到临时文件中是一个坏主意(I想)。

有没有办法简单地将标头直接添加到每个文件中?

标题本身非常小,不超过1 KB

2 个答案:

答案 0 :(得分:9)

您无法将数据插入文件中。

但是,无需将整个文件加载到内存中。只需创建一个新文件,写入要插入的数据,然后将原始文件的内容复制到新文件中(逐块执行,而不是将整个文件加载到内存中)。

最后,删除原始文件并重命名新文件以匹配原始文件。

这是最有效的方法,而且效率相当高。

答案 1 :(得分:4)

没有临时文件应该可以 - 你可以从一端开始逐块读取文件,在(original_position + header_size)处写回每个块。第一个块将在header_size处写回,为标题留出空间。

但是,你真的不想这样做。如果中止,它会破坏文件(想一想:磁盘空间不足,其他I / O错误,掉电等等)。

因此,您应该使用临时文件 - 将所有内容写入其中,然后将其重命名为原始文件的名称(假设您在同一文件系统上创建临时文件,否则您需要复制)。

编辑:澄清我的意思,当整个文件适合RAM时的简化解决方案:

  • 分配与文件相同大小的缓冲区
  • 打开文件,并将其读入缓冲区
  • seek(file,header_size)并在此处写入缓冲区
  • seek(file,0)写标题

如果文件很大,您可以分配较小的缓冲区并重复读取/写入,从file_size - buffer_size读取开始,然后写入file_size - buffer_size + header_size。然后在file_size - 2 * buffer_size读取下一个块重复,在file_size - 2 * buffer_size + header_size处写入,依此类推。

但请允许我再说一遍:如果文件失败,您可能会损坏文件!