在Windows上,从文件中删除前N个字节的最有效方法是什么
What is the most efficient way to remove first N bytes from a file on Windows?
比方说,我有一个任意长度的文件S
,我需要删除它的第一个N
字节(其中N
比S
小得多。)在Windows上,最有效的方法是什么?
我正在寻找一个WinAPI来做到这一点,如果有可用的话。
否则,我的选择是什么——将其加载到RAM中,然后用剩余数据重写现有文件?(在这种情况下,我不能确定电脑是否有足够的RAM?)或者将剩余的文件数据写入新文件,擦除旧文件,然后将新文件重命名为旧文件。(在这种情况下,如果这些步骤中的任何一个失败了该怎么办?另外,这种方法在磁盘上引起的碎片整理如何?)
在操作系统中没有实现这一点的通用方法。理论上有一些方法可以在操作系统下的扇区或集群边界上编辑文件系统的数据结构,但这对每个文件系统都不同,并且需要违反任何安全模型。
要实现这一点,您可以以4k的块读取从字节N开始的数据,然后从字节零开始将其写回,然后在完成数据复制后使用文件截断命令(setendoffile)设置新的较小的文件结尾。
在文件开头删除数据最有效的方法是修改硬盘上的目录条目,该条目告诉数据的起始位置。同样,这是最有效的方法。
注意:如果数据必须在新边界上开始,这可能是不可能的。如果是这种情况,您可能需要将扇区上的剩余数据写入新的扇区,实质上是移动数据
首选方法是写入一个新文件,该文件从删除区域后复制的数据开始。
在同一驱动器上移动文件比复制文件更快,因为数据不会重复;只有文件指针(符号)链接&更新文件分配/索引表。
CMD中的CCD_ 5命令可以修改为允许用户设置文件启动&结束标记,在不复制文件数据的情况下实现文件截断,节省宝贵的时间&RAM/磁盘开销。
替代方案是绕过操作系统直接将命令发送到设备/磁盘驱动器,只要OS知道在哪里可以找到文件&文件属性,例如文件大小、名称和;磁盘上已占用的扇区。
- 从不同线程使用int64的不同字节安全吗
- 欧拉项目#8答案是大以获得有效答案
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 在UNIX系统中使用DIR查找文件的字节大小
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 如何有效地对__m256i向量的字节进行重新排序(将int32_t转换为uint8_t)?
- 获取 qint64 的最高有效字节
- QFile:如何有效地读取从k到k+L的字节
- 在Windows上,从文件中删除前N个字节的最有效方法是什么
- 邪恶的字节块重新解释是否有效C++
- 最高有效字节计算
- 在c++ 11/14中有效地生成随机数据字节
- Unicode字符或多字节字符:哪种类型更有效?为什么
- 最低有效字节是什么意思
- 将两个字节转换为16位值的最有效方法
- Cuda有效地从字节数组复制到不同大小的共享内存元素
- 在内存映射文件中交换字节的有效方式
- c++有效地读取每X个字节中的前几个字节
- 为流式处理写入字节数组的最有效方法