我需要获取驱动器上所有文件的列表。我正在使用递归解决方案。但这需要花费很多时间。我想知道,是否有可能从它的主文件表中获取NTFS驱动器上所有文件的名称和位置?我认为会很快。有什么建议吗?
答案 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>
这样可以完全避免读取任何目录的内容。