我知道当一个文件在文件系统上分配时,比如NTFS或FAT32,文件系统会为它分配一些簇/扇区。在分配完文件后,有没有一个工具可以将分配给该文件的簇从一个位置移到另一个位置,并更新文件系统元数据?这就像手动对文件进行碎片整理一样。
引用MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/aa363911(v=vs.85).aspx
对文件进行碎片整理使用FSCTL_GET_VOLUME_BITMAP控制代码在卷上找到一个足够大的位置,以接受整个文件。注意:如有必要,可以移动其他文件,使其成为足够大的位置。理想情况下,在文件的第一个扩展区之后有足够的未分配集群,您可以将后续扩展区移动到第一个扩展后的空间中。使用FSCTL_GET_RETRIEVAL_POINTERS控制代码获取磁盘上文件当前布局的映射。遍历FSCTL_GET_RETRIEVAL_POINTERS返回的RETRIVAL_POINTERS_BUFFER结构。使用FSCTL_MOVE_FILE控制代码在遍历结构时移动每个簇。注意:当其他进程写入磁盘时,您可能需要在不同时间续订位图或检索结构,或者同时续订两者。