.Net 为我们提供了一个 FolderBrowserDialog 控件来浏览文件夹。然而,这是一个模态对话框。我需要创建一个可以放到表单上的用户控件。因此,我一直在考虑创建自己的,我需要在其中获取所有本地驱动器、映射的网络驱动器、UNC 共享和 Web 文件夹 (WebDAV/SharePoint)。我正在使用 Windows 7 和 .Net 4.0。
本地和映射网络驱动器
我可以从 DriveInfo.GetDrives() 获取本地驱动器。但是,这些仅向我显示可用/在线的驱动器。在 Windows 资源管理器中,您还会看到已断开/不可用的映射网络驱动器。
网络文件夹/UNC 共享
从目前我发现的情况来看,.Net 中似乎没有一种机制来枚举 UNC 共享。看来我必须使用 Interop to Win32 APIs 才能使用WNetOpenEnum
和WNetEnumResource
函数来枚举网络邻居。我得到了这个工作,但想知道是否没有其他方法。
Web (WebDAV) 文件夹和 SharePoint
在 Windows 资源管理器中,我配置了一些 WebDAV 文件夹。使用上面相同的互操作调用WNetOpenENum
,WNetENumResource
我得到了一个节点“Web 客户端网络”,并且出现了已连接和可访问的 WebDAV 文件夹。
问题
- 如何获取已配置但脱机的映射网络驱动器?
- 是否有另一种枚举 UNC 共享的方法,或者我是否坚持使用上述命名的互操作调用?
- 向我返回了“
WNetEnumResource
Microsoft Terminal Services”的空节点。我怎样才能过滤掉这个,而不是根据英文文本过滤? - 返回的 web 文件夹
WNetEnumResource
不是我创建它们时分配给它们的用户友好名称,而是采用 IP-Address@Port 格式,例如\\nnn.nnn.nnn.nnn@18123
. 如何获取 Web 文件夹的用户友好名称? - 离线的网络文件夹根本没有出现,但在 Windows 资源管理器中却出现了。关于获取离线的有什么建议吗?