在Windows上,从文件中删除前N个字节的最有效方法是什么

What is the most efficient way to remove first N bytes from a file on Windows?

本文关键字:字节 有效 是什么 方法 Windows 文件 删除      更新时间:2023-10-16

比方说,我有一个任意长度的文件S,我需要删除它的第一个N字节(其中NS小得多。)在Windows上,最有效的方法是什么?

我正在寻找一个WinAPI来做到这一点,如果有可用的话。

否则,我的选择是什么——将其加载到RAM中,然后用剩余数据重写现有文件?(在这种情况下,我不能确定电脑是否有足够的RAM?)或者将剩余的文件数据写入新文件,擦除旧文件,然后将新文件重命名为旧文件。(在这种情况下,如果这些步骤中的任何一个失败了该怎么办?另外,这种方法在磁盘上引起的碎片整理如何?)

在操作系统中没有实现这一点的通用方法。理论上有一些方法可以在操作系统下的扇区或集群边界上编辑文件系统的数据结构,但这对每个文件系统都不同,并且需要违反任何安全模型。

要实现这一点,您可以以4k的块读取从字节N开始的数据,然后从字节零开始将其写回,然后在完成数据复制后使用文件截断命令(setendoffile)设置新的较小的文件结尾。

在文件开头删除数据最有效的方法是修改硬盘上的目录条目,该条目告诉数据的起始位置。同样,这是最有效的方法。

注意:如果数据必须在新边界上开始,这可能是不可能的。如果是这种情况,您可能需要将扇区上的剩余数据写入新的扇区,实质上是移动数据

首选方法是写入一个新文件,该文件从删除区域后复制的数据开始。

在同一驱动器上移动文件比复制文件更快,因为数据不会重复;只有文件指针(符号)链接&更新文件分配/索引表。

CMD中的CCD_ 5命令可以修改为允许用户设置文件启动&结束标记,在不复制文件数据的情况下实现文件截断,节省宝贵的时间&RAM/磁盘开销。

替代方案是绕过操作系统直接将命令发送到设备/磁盘驱动器,只要OS知道在哪里可以找到文件&文件属性,例如文件大小、名称和;磁盘上已占用的扇区。