2

我的目标是检查 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 等)。有没有办法更有效地完成这项任务?

谢谢。

4

3 回答 3

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
        }

希望这有帮助。

于 2011-08-20T11:19:16.010 回答
1

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

于 2011-08-20T11:14:21.327 回答
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 方式真的有什么问题,使用文件夹的链接,如果目标物理文件夹必须移动,改变链接。然后你可以在一个很好的简洁函数中迭代它们,把它们当作普通文件夹对待。

于 2012-09-12T13:43:42.450 回答