我想快速检查 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:\ 的权限,但对网络共享有权限,所以这不是一个很好的选择。
所以我的问题是,假设用户对文件共享具有权限,我如何检查文件共享是否可用?另外,我也不想强迫用户将“\\SQL001”映射为网络驱动器。
我现在能看到的唯一解决方案是调用 OpenFileDialog 的 ShowDialog 函数并捕获特定异常,清除 InitialDirectory,然后再次调用 ShowDialog。它会工作,但感觉有点hacky,所以我希望有一个更好的解决方案。