我注意到,当我按名称搜索文件时(在 Windows 或 Linux 中),这通常是一个磁盘密集型过程,尤其是在 Windows 中。似乎实用程序(Windows Search,或 Cygwin 中的“find”)会扫描整个目录树,逐个考虑每个文件。
我在想,为什么不将主文件表(或等效文件,如果不是 NTFS)加载到内存中并纯粹在内存中解析它?我认为这类似于 Windows Search、Google 桌面搜索和 Spotlight 等更现代的搜索所维护的索引,但即使是那些也是间接的。我猜文件系统通常不会将其元数据提供给外部程序?
我无法证明该搜索尚未基于 MFT,但根据其运行方式来看,这似乎不太可能。
答案1
有些程序将使用 Windows NTFS 卷上的 MFT 进行搜索,例如开源项目:
http://sourceforge.net/projects/swiftsearch/
http://sourceforge.net/projects/ntfs-search/
它们非常快,但问题是,一旦您开始直接进入 MFT,您就会绕过安全 ACL 和 shell 扩展等功能。因此,大多数这些程序都需要以提升的权限运行,并且不一定会产生与基于 API 的搜索相同的结果。