C# Directory.GetDirectories за исключением папок
Я пытаюсь перебрать список папок пользователей в окнах в "c:\Users", но исключаю встроенные пользовательские папки Microsoft, ниже приведен сегмент кода, который я использую для выполнения этого подвига, но по какой-то причине не работает, как задумано.
private readonly List<String> _exclusion = new List<String>
{
"All Users",
"Default",
"LocalService",
"Public",
"Administrator",
"Default User",
"NetworkService"
};
public static bool FoundInArray(List<string> arr, string target)
{
return arr.Exists(p => p.Trim() == target);
}
foreach (string d in Directory.GetDirectories(sDir).Where(d => !FoundInArray(_exclusion,d)))
{
richTextBox1.Text += d + Environment.Newline;
}
Я не уверен, почему это не работает, кто-нибудь может дать мне некоторое представление об этом?
2 ответа
В вашем лямбда-выражении: 'd' - это полное имя каталога (с путем), и, следовательно, на самом деле его нет в массиве.
Вы могли бы сделать:
public static bool FoundInArray(List<string> arr, string target)
{
return arr.Any(p => new DirectoryInfo(target).Name == p);
}
Directory.GetDirectories() возвращает полный путь к каталогу, а не только последнюю часть каталога.
Хотя вы МОЖЕТЕ убрать последний компонент пути, возвращенного GetDirectories (), и сравнить его с тем, что в настоящее время находится в вашем массиве, это приведет к ложным и ложным отрицаниям.
Вместо этого используйте Environment.SpecialFolders, чтобы получить путь для определенной специальной папки, определенной для текущего пользователя и версии операционной системы.
private readonly List<String> _exclusion = new List<String>
{
Environment.GetFolderPath(Environment.SpecialFolder.MyMusic),
// etc.
}