有没有办法从NTFS卷的MFT中获取文件名/位置信息?

时间:2009-03-27 18:46:51

标签: windows filesystems ntfs

我需要获取驱动器上所有文件的列表。我正在使用递归解决方案。但这需要花费很多时间。我想知道,是否有可能从它的主文件表中获取NTFS驱动器上所有文件的名称和位置?我认为会很快。有什么建议吗?

4 个答案:

答案 0 :(得分:2)

有一种工具可以直接搜索mft,它叫做ndff。我之前使用它并且非常快。

据推测,有可能做你想做的事 - 有一个名为“Everything”的工具我觉得它做同样的事情 - 它还使用USN变更日志来更新它的索引。

答案 1 :(得分:1)

当您使用递归解决方案获取NTFS格式化驱动器上的所有文件的列表时,您将从MFT获取它们。只需检索文件名和目录列表,MFT外部就应该有很少的磁盘IO。

在确定MFT的格式(可从Internet上的各个位置获得)并编写代码以直接读取它之前,您应该分析您的代码并确定您还没有CPU或IO绑定。

答案 2 :(得分:1)

我的印象是你在MFT中想象某种类似列表的结构,你可以一次性阅读,没有或只需要很少的搜索。

事实并非如此。 MFT使用一种b树来存储路径名。当您扫描磁盘上的目录结构时,实际上是在走MFT b树;如果您直接访问MFT,那么您正在做的事情。

答案 3 :(得分:0)

是的,我只是开源的program就是这样。

您可以阅读源代码以了解其工作原理,但基本上,它只在$ MFT中查找FILE_NAME attributes,然后使用ParentDirectory字段获取每个文件的父级。 / p>

这样可以完全避免读取任何目录的内容。