从UNC路径查找网络驱动器
本文关键字:网络 驱动器 查找 路径 UNC | 更新日期: 2023-09-27 18:17:15
我创建了一个按钮,用于获取Clipboard
类的文本内容,检查它是否是文件夹路径并从中创建超链接。用户可能只是从资源管理器窗口复制路径。我遇到的问题,似乎与我发现的许多问题相反,是我想要驱动器路径(T:'Natzely)而不是UNC路径('SEOMAFIL02'Trash'Natzely)。
当我ctrl+v复制路径到Word,记事本或Outlook它被复制为驱动器路径,但当我将它复制到Chrome的地址栏或试图从Clipboard
类检索它被复制为UNC路径。微软是如何处理这个问题的?
我的驱动器号几乎保持不变,所以我不必担心将来T盘不是Trash盘。
编辑
代码
object clipboardText = Clipboard.GetText();
if(!Directory.Exists(clipboardText.ToString()))
{
//Show error message
}
doc = GetDoc(); //Get document to add the hyperlink to
sel = doc.Selection;
range = sel.Range;
hyperlinks = sel.Hyperlinks;
hyperlinks.Add(range, ref clipboardText);
EDIT number Dos
这似乎是Hyperlinks.Add
比剪贴板更多的问题。如果我在剪贴板文本object clipboardText = " " + Clipboard.GetText()
之前添加一个空格,它似乎纠正了这个问题,超链接现在将有一个额外的空间,但链接仍然有效。
你看到微软的这个问题了吗?翻译UNC路径到本地挂载的驱动程序。
似乎有两种方法。第一种方法是从注册表中获取值:
string UNCtoMappedDrive(string uncPath)
{
Microsoft.Win32.RegistryKey rootKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("network");
foreach (string subKey in rootKey.GetSubKeyNames())
{
Microsoft.Win32.RegistryKey mappedDriveKey = rootKey.OpenSubKey(subKey);
if (string.Compare((string)mappedDriveKey.GetValue("RemotePath", ""), uncPath, true) == 0)
return subKey.ToUpperInvariant() + @":'";
}
return uncPath;
}
另一种方法是System.Management。这个例子很大,但下面是它的核心:
private void LoadDrives()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT RemoteName, LocalName FROM Win32_NetworkConnection");
List<UncToDrive> drives = new List<UncToDrive>();
foreach (ManagementObject obj in searcher.Get())
{
object localObj = obj["LocalName"];
if (!Object.Equals(localObj, null))
drives.Add(new UncToDrive(obj["RemoteName"].ToString(), localObj.ToString()));
}
}
它们搜索带有驱动器(LocalName)而不带有驱动器(RemoteName)的所有路径,然后将它们保存在列表中以供以后查找。