说,我有一个任意长度的文件S
,我需要删除它的第一个N
字节(其中N
比S
小得多)什么是在Windows上最有效的方法呢?
我正在寻找一个WinAPI来做到这一点,如果有的话。
否则,我有什么select – 将其加载到RAM中,然后用剩余的数据重写现有文件? (在这种情况下,我不能确定PC是否有足够的内存?)或者将剩余的文件数据写入一个新的文件,擦除旧的文件,然后将新的文件重命名为旧文件。 (在这种情况下,如果这些步骤中的任何一个失败了怎么办?另外如何在磁盘上这个方法导致碎片整理?)
没有通用的方式来做到这一点内置于操作系统。 有理论的方法可以在扇区或集群边界上的操作系统下编辑文件系统的数据结构,但是这对每个文件系统都是不同的,并且需要违反任何安全模型。
为了达到这个目的,你可以从4字节的数据块中的字节N开始读取数据,然后从字节0开始写回数据,然后使用文件truncate命令(setendoffile)设置文件的新的较小的一端完成复制数据。
在文件开头删除数据的最有效的方法是修改硬盘上的目录项,告诉数据的起始位置。 再次,这是最有效的方法。
注意:如果数据必须从新的边界开始,这可能是不可能的。 如果是这种情况,您可能需要将部门的剩余数据写入新的部门,实质上是移动数据。
首选的方法是写入一个新的文件,在删除区域之后复制的数据开始。