Проверьте, является ли DirectoryInfo.FullName специальной папкой - PullRequest
2 голосов
/ 20 августа 2011

Моя цель - проверить, является ли 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 ]

4 голосов
/ 20 августа 2011

Попробуйте следующий код:

        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 голос
/ 12 сентября 2012

Боюсь, что приведенные ответы кажутся единственными, я ненавижу специальные папки, потому что это должна быть очень простая функция -

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 ();

Достаточно справедливо для Microsoft, чтобы иметь папку, которая может существовать где угодно, на удаленном ПК, на сервере и т. Д. Но на самом деле, что не так с UNIX / Linux, используйте ссылки на папку, и если физическая папка назначения должна переместить, изменить ссылку. Затем вы можете преобразовать их в красивую аккуратную функцию, рассматривая их как обычные папки.

1 голос
/ 20 августа 2011

Используйте отражение, чтобы получить все значения из этого перечисления, как здесь http://geekswithblogs.net/shahed/archive/2006/12/06/100427.aspx, и проверьте набор полученных сгенерированных путей.

...