我的问题是:如果这个文件(非常重要)很小(小于一个簇,只有几个字节),如何获取文件磁盘偏移量。
目前我使用这个Windows API函数:
DeviceIOControl(FileHandle, FSCTL_GET_RETRIEVAL_POINTERS, @InBuffer, SizeOf(InBuffer), @OutBuffer, SizeOf(OutBuffer), Num, Nil);
FirsExtent.Start := OutBuffer.Pair[0].LogicalCluster ;
对于大于集群的文件,它完美,但对于较小的文件,它会失败,因为它总是返回空偏移量。
处理小文件应遵循什么程序?它们位于 NTFS 卷上的什么位置?有没有其他方法可以知道文件偏移量?这种微妙之处似乎没有在任何地方记录下来。
注意:问题被标记为 Delphi,但 C++ 示例或示例也将受到赞赏。
最佳答案
该文件可能是常驻文件,这意味着它的数据足够小,可以放入其 MFT 条目中。请参阅此处以获得稍长的描述:
http://www.disk-space-guide.com/ntfs-disk-space.aspx
因此,您基本上需要找到 MFT 条目的位置才能知道数据在磁盘上的位置。你控制这个文件吗?如果是这样,最简单的方法是确保它始终大于 MFT 条目的大小(不是记录值,但您始终可以只执行 4K 或其他值)。
关于c++ - NT 文件系统上非常小的文件上的 FSCTL_GET_RETRIEVAL_POINTERS 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8682960/