我想使用C向文件(或文件组)添加标准头文件.这些文件可能非常大,因此将它们加载到内存中或将它们复制到临时文件中是个坏主意(我认为).
有没有办法简单地将标头直接添加到每个文件?
标题本身非常小,不超过1 KB
您无法将数据插入文件.
但是,不需要将整个文件加载到内存中.只需创建一个新文件,写入要插入的数据,然后将原始文件的内容复制到新文件中(逐块执行,而不是将整个文件加载到内存中).
最后,删除原始文件并重命名新文件以匹配原始文件.
这是最有效的方法,并且效率相当高.
没有临时文件应该是可能的 - 您可以从末尾开始逐块读取文件,然后将每个块写回(original_position + header_size)。第一个块将在 处写回header_size,为标头留出空间。
但是,您实际上并不想这样做。如果中止,它会损坏文件(想想:磁盘空间不足、其他 I/O 错误、断电等等)。
因此,您实际上应该使用临时文件 - 向其中写入您需要的所有内容,然后将其重命名为原始文件的名称(假设您在同一文件系统上创建临时文件,否则您需要复制)。
编辑:为了澄清我的意思,当整个文件适合 RAM 时简化解决方案:
如果文件太大,您可以分配较小的缓冲区并从 read atfile_size - buffer_size和 write at开始重复读/写file_size - buffer_size + header_size。然后重复下一个块在 处读取file_size - 2 * buffer_size、在 处写入file_size - 2 * buffer_size + header_size,依此类推。
但让我再说一遍:如果失败,您的文件就有损坏的风险!