首页 > 解决方案 > 为什么使用 Linq 从远程文件夹中的 GetFiles 挂起

问题描述

我正在尝试获取 LastWriteTime 排序的文件夹中的文件。

访问本地路径 (C:\MyFolder) 时代码运行速度非常快,但访问远程路径 (\\MyServer\MyFolder) 时却挂起

Dim myOrderedList As List(Of String) = (From item In IO.Directory.GetFiles(strFolderSource) _
        Let file = New IO.FileInfo(item) _
        Order By file.LastWriteTime _
        Select item).ToList()

这段代码应该工作吗?不允许这种方法从远程文件夹中获取文件吗?我可以使用哪个替代代码来获得相同的结果而不挂起?

已编辑(2019-01-18 16:32):

对不起,伙计们,我已经尝试了 Rango 提出的解决方案,但仍然是同样的问题。最后,我创建了一个小型日志记录系统来捕获导致问题的步骤,并意识到这一切都是凭据问题。

就在我发布的代码之前,我做了一个 NET USE 来授予对远程计算机的访问权限,并执行了 net use,但是由于任何原因,GetFiles() 由于登录失败而失败:未知用户名或密码错误。那么,我可以在调用 GetFiles() 之前确保使用网络使用的凭据吗?

也许使用暂停或类似的东西?

完整代码:

Dim processInfo As New System.Diagnostics.ProcessStartInfo()
processInfo.FileName = "C:\WINDOWS\system32\net"
processInfo.Arguments = "net use \\MyServer\IPC$ ""password"" /USER:Username"
System.Diagnostics.Process.Start(processInfo)

Dim myOrderedList As List(Of String) = (From item In IO.Directory.GetFiles("\\MyServer\g$\MyFolder") _
        Let file = New IO.FileInfo(item) _
        Order By file.LastWriteTime _
        Select item).ToList()

标签: vb.netlinq

解决方案


您可以尝试改用它,DirectoryInfo.EnumerateFiles它有两个优点:

  1. 不需要来自远程服务器的连续安全握手
  2. 在开始订购之前流式传输文件而不是将所有文件加载到内存中

Dim di = new DirectoryInfo(strFolderSource)
Dim files = From fi In di.EnumerateFiles() Order By fi.LastWriteTime Select fi.FullName
Dim myOrderedList As List(Of String) = files.ToList()

推荐阅读