我想在 C# 中快速检查文件共享是否可用,但对网络共享上可能存在的目录一无所知。我找到了这些帖子 1 2 3显示如何检查网络目录是否可用,但它们都假设我知道我想要检查是否存在的目录共享。也就是说,他们想检查 \\SomeServer\SomeDirectory 是否可用,但我只想检查 \\SomeServer 是否可用。
为了更详细地了解我正在尝试做的事情,我提示用户输入要连接的 SQL 服务器,他们给了我一个地址,例如“SQL001”;显然这个地址只有在我们的内部网络上才有效。使用此地址,我可以连接到服务器及其数据库。现在,我为他们提供了备份数据库的选项,并且想要 OpenFileDialog将 InitialDirectory 设置为“\\SQL001”,以便他们可以快速访问该服务器上的共享文件夹并在远程服务器上备份数据库。
如果我将“\\SQL001”设置为 OpenFileDialog 的 InitialDirectory,一切正常,但是如果他们输入错误并输入“\\SQL002”(不存在),或者尝试在关闭内部时使用该工具网络,则 OpenFileDialog 的 ShowDialog 函数会抛出错误。所以我想先检查并确保文件共享可用,如果不可用,我不会设置 InitialDirectory。
不幸的是,使用 Directory.Exists("\\SQL001") 总是返回 false。如果我执行 Directory.Exists("\\SQL001\Backups") 它可以工作,但我们有许多不同的 SQL 服务器,它们并不都有一个名为“Backups”的共享,所以这不是可靠的。我也可以使用对我有用的 Directory.Exists("\\SQL001\c$\"),但是很多员工没有权限访问根目录 C:\,但是有权限访问网络共享,所以这也不是一个好的选择。
所以我的问题是,假设用户有权访问文件共享,我如何检查文件共享是否可用?另外,我不想强迫用户 map "\\SQL001" as a network drive要么。
我现在能看到的唯一解决方案是调用 OpenFileDialog 的 ShowDialog 函数并捕获特定异常,清除 InitialDirectory,然后再次调用 ShowDialog。它会工作,但感觉有点老套,所以我希望有更好的解决方案。
最佳答案
有效的 UNC 路径必须至少包含两个组件;\SERVERNAME\SHARE;如果不满足该条件,Directory.Exists 将返回 false。
要确定由 SERVERNAME 标识的机器是否存在,您可以使用 GetHostByName
http://msdn.microsoft.com/en-us/library/system.net.dns.gethostbyname.aspx
不过,这仍然不会告诉您机器是否已关闭。
关于c# - 检查服务器路径是否可用作 C# 中的文件共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19123389/