我的问题是:如果这个文件(非常重要)很小(少于一个集群,只有几个字节),如何获得文件磁盘偏移量。
目前我使用此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 ++样本或示例也会受到赞赏。
答案 0 :(得分:4)
该文件可能是常驻文件,这意味着它的数据足够小以适合其MFT条目。请在此处查看稍长的说明:
http://www.disk-space-guide.com/ntfs-disk-space.aspx
因此,您基本上需要找到MFT条目的位置,以便知道数据在磁盘上的位置。你控制这个文件了吗?如果是这样,最简单的方法是确保它总是大于MFT条目的大小(不是记录的值,但你总是可以做4K或其他东西)。