【问题标题】:faster getfiles in directory目录中更快的getfiles
【发布时间】:2014-08-22 13:38:44
【问题描述】:

我有一些代码必须在几个子目录中搜索大约 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

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

谢谢。

【问题讨论】:

  • 所以你不需要一个列表只是一个文件或没有? Directory.EnumerateFiles 可以在第一次匹配时中断

标签: vb.net directoryinfo getfiles


【解决方案1】:

要知道文件夹结构中是否存在具有特定扩展名的文件,您可以使用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 扩展名的文件的简单基准测试需要 Count() 960 毫秒,而 Any() 无法测量(0 毫秒)(在SSD盘)

【讨论】:

  • 这是个好时机。我最多看10分钟。一定是网络问题。
  • 正如我所说的,物有所值条件截然不同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
相关资源
最近更新 更多