【问题标题】:How To: Prevent Timeout When Inspecting Unavailable Network Share - C#如何:在检查不可用的网络共享时防止超时 - C#
【发布时间】:2010-10-18 02:47:58
【问题描述】:

我们有一些基本的 C# 逻辑可以遍历目录并返回其中的文件夹和文件。当针对无法访问或无效的网络共享 (\\server\share\folder) 运行时,代码似乎会“挂起”大约 30 秒,然后从调用返回。

我想最终获得一种方法,该方法将尝试从给定路径获取文件夹和文件,但没有超时期。换句话说,完全减少或消除超时。

我已经尝试过一些简单的方法,比如提前验证目录的存在,认为“不可用”的网络驱动器会很快返回 false,但这并没有按预期工作。

System.IO.Directory.Exists(path) //hangs 

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path); //hangs

关于什么可以帮助我实现高效(并希望得到管理)解决方案的任何建议?

【问题讨论】:

  • 任何带有完整源代码示例的最终解决方案?

标签: c# windows networking filesystems


【解决方案1】:

您可以使用此代码:

var task = new Task<bool>(() => { var fi = new FileInfo(uri.LocalPath); return fi.Exists; });
task.Start();

return task.Wait(100) && task.Result;

【讨论】:

  • +1 来自我,这对文件来说非常有用,但用它来回答原始问题是没用的。要回答这个问题,请尝试将 new FileInfo(uri.LocalPath) 替换为 new DirectoryInfo(strPath) 以检查目录而不是文件。
  • ***这应该是答案*** OP pls chng
【解决方案2】:

把它放在它自己的线程上,如果它在一定时间内没有回来,继续前进。

【讨论】:

    【解决方案3】:

    也许您可以先尝试 ping 服务器,然后在收到响应时才询问目录信息?

    【讨论】:

    • 我已经成功地使用它来遍历我们的机器网络,寻找软件。但是,从 UNC 路径中解析出服务器可能并不可行。
    【解决方案4】:

    看...

    Faster DirectoryExists function?

    ...为 Directory.Exists 设置执行时间的方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多