在NTFS中搜索文件

时间:2009-11-23 16:40:01

标签: c# search wildcard ntfs

我们有一个相当大的磁盘阵列,上面有大约2-3百万个XML文件。磁盘使用NTFS格式化,我们希望使用通配符搜索文件系统。所以* SomePartOfTheFilename *之类的东西就是典型的搜索查询。

我们正在使用.Net并且发现使用DirectoryInfo看起来很慢。

DirectoryInfo directoryInfo = new DirectoryInfo(directory);

List<FileInfo> fileInfos = directoryInfo.GetFiles(searchString, SearchOption.AllDirectories).ToList();

使用循环和递归也很慢。

我们可以使用较低级别的API调用来直接搜索NTFS索引吗?

使用命令行中的dir * SomePartOfTheFilename * / s几乎是即时的。那里有什么东西可以利用吗?

2 个答案:

答案 0 :(得分:1)

我不确定您是否可以使用索引服务,但它可能对您要做的事情很方便:

http://msdn.microsoft.com/en-us/library/ee805985%28VS.85%29.aspx

http://www.codeproject.com/KB/database/Indexing_Service_HOW-TO.aspx

它允许您针对计算机上文件的NTFS索引创建复杂查询。

答案 1 :(得分:1)

您可以直接使用MFT(参见:NTFS Wiki)。这是数据表,其中包含有关文件的所有信息。您可以看到MFT的结构,例如herehere。 Windows API最终位于同一个表中,因此您可以尝试加快搜索速度,以确保在搜索之前将其内存分页(简单读取例如c:\ $ Mft就足够了)。