我需要获取驱动器上所有文件的列表。我正在使用递归解决方案。但这需要很多时间。我想知道,是否可以从它的主文件表中获取 NTFS 驱动器上所有文件的名称和位置?我认为它会非常快。有什么建议么?
Deepak
问问题
2637 次
4 回答
2
有一个工具可以直接搜索mft,它叫做ndff。我以前用过它,速度非常快。
大概可以做你想做的事——还有另一个工具叫做“Everything”,我猜它做同样的事情——它还使用 USN 更改日志来更新它的索引。
于 2009-11-27T08:29:31.747 回答
1
当您使用递归解决方案获得 NTFS 格式驱动器上所有文件的列表时,您就是从 MFT 获得它们。当简单地检索文件名和目录列表时,在 MFT 之外应该有很少的磁盘 IO。
在确定 MFT 的格式(可从 Internet 上的许多地方获得)并编写代码以直接读取它之前,您可能应该分析您的代码并确定您还不是 CPU 或 IO边界。
于 2009-03-27T22:14:07.063 回答
1
我的印象是,您正在想象 MFT 中的某种类似列表的结构,您可以一口气阅读,而无需或只需最少的搜索。
不是这种情况。MFT 使用一种 b 树来存储路径名。当您扫描磁盘上的目录结构时,您实际上是在遍历 MFT b-tree;如果您直接访问 MFT,您正在做您必须做的事情。
于 2009-03-28T11:17:27.383 回答
0
是的,我刚刚开源的程序就是这样做的。
您可以阅读源代码以了解它是如何工作的,但基本上,它只是在 $MFT 中查找FILE_NAME
属性,然后使用该ParentDirectory
字段来获取每个文件的父级。
这样就可以完全避免读取任何目录的内容。
于 2012-12-21T04:22:33.897 回答