0

执行时mmap.move()是否重写了“dest”点之后的整个文件?

如果我有一个大文件,比如演出,我只想删除第一行(可能是 70 个字节?),mmap.move(0, 70, <size - 70>)如果需要,我可以执行类似的操作并截断文件末尾的最后 70 个字节。这样做时,整个文件(减去我覆盖的 70 个字节)是否被完全读取并写回磁盘?

如果是这样,有没有办法从文件的开头删除而不必重新编写整个内容?

4

1 回答 1

0

典型的文件系统没有“在文件开头截断”之类的功能,但您可以想象创建具有这种功能的文件格式。例如,如果您的原始文件是这样的:

ABCDEFGHIJKL

你想删除 AB:

CDEFGHIJKL

但是你不想洗牌所有的数据,所以解决这个问题:

KLCDEFGHIJ

为了支持这一点,您所需要的只是文件“开始”位置的索引,以便您可以将其视为循环缓冲区。在这种情况下,索引将从 0 开始,删除 AB 后为 2,您将仅复制要删除的数据量(因此操作将是 O(m) 而不是 O(n),其中 m是删除的数量,n 是总大小)。

至于在哪里以及如何存储簿记信息,这取决于本机文件格式是什么,以及您使用的是哪个文件系统。根据您的需要,您甚至可以将其存储在单独的元数据系统(如数据库)中。

于 2013-04-27T04:34:52.807 回答