Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在NTFS中搜索文件_C#_Search_Wildcard_Ntfs - Fatal编程技术网

C# 在NTFS中搜索文件

C# 在NTFS中搜索文件,c#,search,wildcard,ntfs,C#,Search,Wildcard,Ntfs,我们有一个相当大的磁盘阵列,上面有大约200-300万个XML文件。磁盘格式化为NTFS,我们希望使用通配符搜索文件系统。所以类似于*SomePartofFileName*的东西将是一个典型的搜索查询 我们正在使用.Net,并且发现使用DirectoryInfo似乎很慢 DirectoryInfo directoryInfo = new DirectoryInfo(directory); List<FileInfo> fileInfos = directoryInfo.GetFil

我们有一个相当大的磁盘阵列,上面有大约200-300万个XML文件。磁盘格式化为NTFS,我们希望使用通配符搜索文件系统。所以类似于*SomePartofFileName*的东西将是一个典型的搜索查询

我们正在使用.Net,并且发现使用DirectoryInfo似乎很慢

DirectoryInfo directoryInfo = new DirectoryInfo(directory);

List<FileInfo> fileInfos = directoryInfo.GetFiles(searchString, SearchOption.AllDirectories).ToList();
DirectoryInfo DirectoryInfo=新的DirectoryInfo(目录);
List fileInfos=directoryInfo.GetFiles(searchString,SearchOption.AllDirectories).ToList();
使用循环和递归也很慢

我们是否可以使用较低级别的API调用直接搜索NTFS索引


从命令行使用dir*somepartoffilename*/s几乎是即时的。有什么可以利用的吗?

我不确定您是否可以使用索引服务,但它可能对您尝试执行的操作很方便:


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

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

cygwin中的查找是否也会很快完成,或者与.net代码的速度类似?如果是这样的话,它可能是cmd.exe和预建索引之间的某种超级机密MS集成。您没有使用索引服务(如下所述)或某些自制解决方案构建外部索引有什么特殊原因吗?搜索文件系统不仅会让您的速度变慢,而且如果磁盘头最终在尝试为竞争请求提供服务时辗转反侧,您也有可能会让其他人的工作变慢……我们希望依靠NTFS索引能够足够快,我们很可能会创建自己的文件索引,但希望首先探索其他选项。我已经开始简单地创建一个文本文件(想想:dir/s/b C:\>filelist.txt)用作索引。我发现Windows(在win7上)的文件索引速度非常慢,而且常常不可靠。Windows索引经常找不到我知道存在的文件,我不得不强制重新生成来解决这个问题。通过一个文本文件进行Grepping是快速和可靠的,尽管这并不理想。嗨,斯科特,谢谢你的想法,尽管我不确定索引服务在这里是否合适。我认为索引服务创建了一个文件内容和文件名的索引,因此我认为我们最终会得到一个巨大的索引。我们的磁盘大约是500Gb。我们只对搜索文件名感兴趣。我想知道是否可以将索引服务配置为只索引文件名?-需要看一下。。。