如何(快速)检查 UNC 路径是否可用
如何检查 UNC 路径是否可用? 我遇到的问题是,如果共享不可用,检查大约需要半分钟:
var fi = new DirectoryInfo(@"\\hostname\samba-sharename\directory");
if (fi.Exists)
//...
是否有更快的方法来检查文件夹是否可用? 我使用的是 Windows XP 和 C#。
How can I check if a UNC Path is available?
I have the problem that the check takes about half a minute if the share is not available :
var fi = new DirectoryInfo(@"\\hostname\samba-sharename\directory");
if (fi.Exists)
//...
Is there a faster way to check if a folder is available?
I'm using Windows XP and C#.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
这是一种快速而肮脏的检查方法 - 运行 windows
net use
命令并解析具有感兴趣的网络路径的行的输出(例如\\vault2
)和确定
。这是输出的示例:这不是一个非常 .netish 的解决方案,但它非常快,有时这更重要:-)。
这是执行此操作的代码(LINQPad 告诉我它只需要 150ms,所以这很好)
或者您可以使用 WMI,如此中提到的回答如何确保网络驱动器连接应用程序?
How's this for a quick and dirty way to check - run the windows
net use
command and parse the output for the line with the network path of interest (e.g.\\vault2
) andOK
. Here's an example of the output:It's not a very .netish solution, but it's very fast, and sometimes that matters more :-).
And here's the code to do it (and LINQPad tells me that it only takes 150ms, so that's nice)
Or you could probably go the route of using WMI, as alluded to in this answer to How to ensure network drives are connected for an application?
在我的项目中,我使用 System.IO :
到目前为止它非常快......
In my project I use the System.IO :
and it's pretty fast so far...
在我的一个项目中,我必须检查服务器连接是否已建立。我使用 TCP Socket 异步检查是否可以到达服务器。我想知道您是否可以使用它来检查网络共享。异步 TCP 套接字连接速度非常快,我在 60 毫秒内测试了 10 次连接。也许你可以玩一下?
编辑:这是我用于我的项目的异步套接字。使用此类来检查某个 IP 或地址。希望它对您有用
编辑:请不要只是复制/粘贴它。尝试理解代码,以便您可以使用它来为您带来好处,并根据您的需要对其进行微调。
In a project of mine, i had to check whether a server connection was established or not. I used a TCP Socket to asynchronically check whether the server could be reached or not. I wonder if you could use this to check on a network share. The async TCP Socket connect goes so fast i tested for the connection 10 times under 60 miliseconds. Maybe you could play around with that a bit ?
EDIT: Here is the Asynchronous Socket i used for my project. Use this class to check for a certain IP or address. Hope it is of any use to you
Edit: Please don't just copy/paste it. Try to understand the code so you can use it for your benefit, and finetune it for your needs.
我最终“作弊”并只是 ping 主机,这是合理的,因为实际上我正在检查的情况就是这样。
这种方式最适合我,因为它速度快、简单且可靠。
I ended up "cheating" and just pinging the host, which is reasonable as that in reality is the case that I'm checking for.
This way suits me best because of its speed, simplicity, and reliability.
我使用了上面建议的 ping 方法,但它对我不起作用,因为我使用的是 OpenDNS
这是一个对我来说效果很好的功能:
I used the ping method suggested above and it did not work for me since I am using OpenDNS
Here is a function that worked well for me:
这可能是最快的方法,延迟将是一般网络速度/磁盘访问等。
如果这导致用户延迟,您可以尝试异步检查吗?
Thats probably the quickest way, the delay will be the general network speed/disk access etc.
If this is causing a delay for the user, you could try checking this asynchronously?
也许您应该尝试创建该文件夹,如果它确实存在,它将返回您可以捕获的错误。不应该有默认超时。
Maybe you should try to create the folder, if it does exist, it will return an error that you could catch. There should be no default timeout.
接受的答案在我的情况下不起作用,因为即使驱动器可用(当我的 VPN 重新连接时),驱动器仍保持“断开连接”状态,直到我访问该驱动器。
相反,这是有效的:对 IP 进行一次快速 ping。
例如:
ping 192.168.10.98 -n 1 -w 100
The accepted answer didn't work in my case because the drive stays "Disconnected" even if it is available (when my VPN reconnects) until I access the drive.
Instead this works: do a single quick ping of the IP.
For example:
ping 192.168.10.98 -n 1 -w 100