我需要获取驱动器上所有文件的列表。 我正在使用recursion解决scheme。 但是这花了很多时间。 我想知道,是否有可能从它的主文件表中获取NTFS驱动器上的所有文件的名称和位置? 我认为这将是非常快的。 有什么build议么?
当您使用递归解决方案获取NTFS格式化驱动器上所有文件的列表时,您将从MFT获取它们。 简单地检索文件名和目录列表时,MFT之外应该有小磁盘IO。
在确定MFT格式(可以从互联网上的各种地方获得)以及编写代码直接读取它的格式之前,您应该对您的代码进行剖析,并确定您不是CPU或IO界。
有一个工具可以直接搜索mft,叫做ndff。 我以前用过,速度非常快。
大概有可能做你想做的事 – 还有另外一个叫做“Everything”的工具,我猜也是一样的 – 它也使用USN更改日志来更新它的索引。
我有一个印象,你正在想象MFT中的某种类似于列表的结构,你可以一眼就读完,而且没有或者很少寻找。
不是这种情况。 MFT使用一种b-tree来存储路径名。 当你扫描磁盘上的目录结构时,实际上你正在走MFT B-树; 你正在做什么,如果你直接访问MFT你将不得不做的。
是的,我刚刚开源的程序就是这样做的。
您可以阅读源代码以了解其工作原理,但基本上,它只是在$ MFT中查找FILE_NAME
属性 ,然后使用ParentDirectory
字段获取每个文件的父项。
这样可以完全避免读取任何目录的内容。