目录中更快的getfiles

时间:2014-08-22 13:38:45

标签: vb.net directoryinfo getfiles

我有一些代码必须在几个子目录中搜索大约30000个文件,以查看是否仍然存在具有特定扩展名的任何文件。它通过网络运行到iSeries共享。任何建议,使这更快。

Dim _cnt As Int16 = _di.GetFiles("*." + row("extension"), SearchOption.AllDirectories).Length
                    If _cnt > 0 Then
                        Dim _msg As String = _dir + " still has " + _cnt.ToString() + " " + row("extension")
                        MessageBox.Show(_msg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                        ts_StatusLabel.Text = _msg
                        Return
                    End If

还有办法在第一次点击时停止搜索吗?

谢谢。

1 个答案:

答案 0 :(得分:4)

要知道文件夹结构中是否存在具有特定扩展名的文件,您可以将DirectoryInfo.EnumerateFilesAny()一起使用。这会立即启动枚举,而无需等待首先加载具有指定扩展名的所有文件。

Dim extFound = _di.EnumerateFiles("*." & row("extension"), _
                                  SearchOption.AllDirectories).Any()
If extFound Then
   Console.WriteLine("File with specific extension found")
End If

当然,这并不会返回带有该扩展名的文件数,但它只会通知是否存在具有指定扩展名的文件。

如果您需要计数,则可以使用Count()扩展名。但是,您需要等到整个搜索完成后才会与当前代码完全不同。

Dim _cnt = _di.EnumerateFiles("*." + row("extension"), _
                              SearchOption.AllDirectories).Count()
If _cnt Then
   Console.WriteLine("Found " & _cnt & " file/s")
End If

对于它的价值,在我的Microsoft Visual Studio文件夹(37000个文件)上搜索具有EXE扩展名的文件的简单基准测试需要960毫秒的Count(),并且它不可测量(0毫秒)的Any()(在SSD磁盘上)