有效地将扇区插入文件

Insert sectors into a file efficiently

我有一个大文件(几千兆字节),我需要在它的开头重复插入扇区(扇区和写入的确切数量事先不知道)。

一个明显的解决方案是简单地读取文件,插入数据并再次写入,但这效率太低了。考虑到文件系统的工作方式,绝对可以将一个扇区插入文件的任何位置,但是如果不深入研究非常低级别的 API 是否可行?

我怀疑您会找到一个 API 可以做到这一点。您也许可以查看磁盘碎片整理 API,但我不确定它是否给您足够的控制权。

如果您需要 NTFS,我有一个替代建议; sparse files。创建一个非常大的稀疏文件(1 TiB?)并从头到尾写入文件。您可能需要在文件开头使用某种 header 来记录您在文件中实际所在的偏移量。此方案要求您在开始编写块之前知道每个块的大小。显然,如果您只是编写纯 ASCII 日志文件,这将不起作用。

这种设计的一个主要缺点是用户很难move/copy将文件转移到另一个卷。