我有一些代码必须在几个子目录中搜索大约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
还有办法在第一次点击时停止搜索吗?
谢谢。
答案 0 :(得分:4)
要知道文件夹结构中是否存在具有特定扩展名的文件,您可以将DirectoryInfo.EnumerateFiles与Any()
一起使用。这会立即启动枚举,而无需等待首先加载具有指定扩展名的所有文件。
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磁盘上)