从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路径查找网络驱动器

你看到微软的这个问题了吗?翻译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)的所有路径,然后将它们保存在列表中以供以后查找。