识别所有打开的系统/特殊文件夹

时间:2012-01-10 21:15:14

标签: c# .net vb.net shdocvw

我目前正在使用以下Get Path in a ListBox of all Open Explorer Windows

foreach (SHDocVw.InternetExplorer j in new SHDocVw.ShellWindows()) {
    if (j.Name == "Windows Explorer") {
        ListView1.Items.Add(j.LocationURL);
    }
}

但是它不会返回特殊文件夹的位置,如计算机,回收站,网络等。有没有办法识别这些文件夹,所以我可以像shell:MyComputerFolder那样为我自己设置路径? / p>

4 个答案:

答案 0 :(得分:3)

您需要使用Environment.GetFolderPath(Environment.SpecialFolder) method

Environment.SpecialFolder是一个枚举,其中包含所有Windows“特殊”文件夹的值(例如,我的文档,程序文件,桌面)

<强>更新 您可以使用此方法来判断给定路径是否是特殊文件夹:

public static bool IsSpecialFolder(string folderPath)
{
    foreach (Environment.SpecialFolder specialFolderType in Enum.GetValues(typeof (Environment.SpecialFolder)))
    {
        var specialFolderLocation = Environment.GetFolderPath(specialFolderType);

        if(specialFolderLocation.Equals(folderPath, StringComparison.InvariantCultureIgnoreCase))
            return true;
    }

    return false;
}

例如,您可以为每个IsSpecialFolder(j.LocationURL)调用j,以找出哪些打开的文件夹是特殊文件夹。

答案 1 :(得分:1)

如果j.LocationNamenull,我会将其与当前系统文件夹的名称Get Current Names of Windows Special Folders进行比较,然后手动添加路径,如shell:MyComputerFolder

答案 2 :(得分:0)

可以像这样使用Environment.SpecialFolder枚举

Environment.GetFolderPath(Environment.SpecialFolder.System))

在链接中,顺便提一下具体的代码示例。

答案 3 :(得分:0)

  

我需要获取路径...但它不会返回特殊文件夹的位置,如计算机,回收站,网络等。

如果窗口的位置不是物理目录,那么您遇到的直接问题是LocationURL会返回""。对于“我的电脑”,“回收站”和“网络”,这并不奇怪 - 这些是虚拟文件夹; 不是可以指向它们的路径或URL,因为它们不是磁盘上的位置。

但是,如果您导航到“Doc​​uments”( 对应于磁盘上的目录,即使它也是一个特殊文件夹),LocationURL仍会返回"" 。在这里它可以给你一条路径,但它选择不这样做。这似乎有点意味着它。

我找到了一些说明ShellWindows返回InternetExplorer objects的文档。我找不到您正在使用的ShellBrowserWindow课程的任何文档,但InternetExplorer似乎相似或相同,因此您可以参考一些documentation而不是仅仅需要查看Intellisense中的属性名称。

唯一看起来有用的其他属性是LocationName,即使对于虚拟或特殊文件夹也会返回一些内容。但是,它返回一个像“Documents”或“Libraries”这样的字符串,这不是你可以真正以编程方式使用的东西(它在不同的语言环境,不同的Windows版本等中会有所不同)。

如果您需要的只是列表中显示的内容,LocationName可能就足够了。如果你真的需要这条路径,那么你可能会运气不好(不过你会反正,因为如上所述,计算机,回收站和网络之类的东西没有路径)。