代码之家  ›  专栏  ›  技术社区  ›  Jortx

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

  •  0
  • Jortx  · 技术社区  · 6 年前

    我正在尝试从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提出的解决方案,但还是一样。最后,我创建了一个小的日志系统来捕捉导致问题的步骤,并意识到这一切都是一个凭证问题。

    那么,在调用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 回复  |  直到 6 年前
        1
  •  4
  •   Tim Schmelter    6 年前

    你可以试着用 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()
    
        2
  •  0
  •   Jortx    6 年前

    最后解决了包括5秒后的睡眠 在那之前

    System.Threading.Thread.Sleep(5000)
    

    谢谢你的时间,希望这能帮助任何有类似问题的人。