检查DirectoryInfo.FullName是否是特殊文件夹

时间:2011-08-20 11:03:44

标签: c# special-folders directoryinfo

我的目标是检查DirectoryInfo.FullName是否是特殊文件夹之一。

以下是我正在为此做的事情(如果每个特殊文件夹相同,请检查directoryInfo.FullName):

        DirectoryInfo directoryInfo = new DirectoryInfo("Directory path");

        if (directoryInfo.FullName == Environment.GetFolderPath(Environment.SpecialFolder.Windows) ||
            directoryInfo.FullName == Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles ||) 
            ...
            ...
           )
        {
            // directoryInfo is the special folder
        }

但是有许多特殊文件夹(Cookies,ApplicationData,InternetCache等)。有没有办法更有效地完成这项任务?

感谢。

3 个答案:

答案 0 :(得分:4)

请尝试以下代码:

        bool result = false;
        DirectoryInfo directoryInfo = new DirectoryInfo("Directory path");
        foreach (Environment.SpecialFolder suit in Enum.GetValues(typeof(Environment.SpecialFolder)))
        {
            if (directoryInfo.FullName == Environment.GetFolderPath(suit))
            {
                result = true;
                break;
            }
        }

        if (result)
        {
            // Do what ever you want
        }
希望这有帮助。

答案 1 :(得分:1)

使用反射来获取该枚举中的所有值,例如此处http://geekswithblogs.net/shahed/archive/2006/12/06/100427.aspx,并检查您获得的生成路径的集合。

答案 2 :(得分:1)

我担心给出的答案似乎是唯一的方法,我讨厌特殊文件夹,因为这应该是一个非常简单的功能 -

void CollectFiles(string strDir, string pattern) {
  DirectoryInfo di = new DirectoryInfo(strDir);
  foreach(FileInfo fi in di.GetFiles(pattern) {
    //store file data
  }
  foreach(DirectoryInfo diInfo in di.GetDirectories()) {
    CollectFiles(diInfo);
  }
}

变得丑陋,因为你必须包括

Check If This Is A Special Folder And Deal With It And Its Child Folders Differently ();

足够公平微软,有一个文件夹,可以存在于任何地方,远程PC,服务器等。但真正的问题是UNIX / Linux方式,使用链接到文件夹,如果目标物理文件夹必须移动,改变链接。然后你可以在一个漂亮的整洁功能中对它们进行迭代,将它们视为普通文件夹。