为什么使用Linq从远程文件夹中获取GetFiles挂起

时间:2019-01-18 11:21:14

标签: vb.net linq

我正在尝试获取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来授予对远程计算机的访问权限,并且执行了网络使用,但是由于任何原因,由于登录失败,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()

2 个答案:

答案 0 :(得分:4)

您可以尝试使用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()

答案 1 :(得分:0)

最终解决,包括在网络使用之后和 GetFiles()之前的5秒钟的睡眠:

await chatRoomReference.setData({
  ‘secondUserUID': uid,
});

感谢您的时间,并希望这对遇到类似问题的任何人有所帮助。