Как получить список всех файлов находящихся на машине (полный путь + имя файла)? Я используюDirectory.EnumerateFilesвместе сEnumerationOptions { IgnoreInaccessible = true }. Когда параметр path="/home/user/" то все ошибки пропускаются, и я получаю список всех доступных файлов, но когда path="/" то программа бросает исключение
Try-catch не помогает.C#:System.UnauthorizedAccessException: Access to the path '/usr/share/doc/lite-themes/copyright' is denied. ---> System.IO.IOException: Permission denied --- End of inner exception stack trace --- at System.IO.Enumeration.FileSystemEntry.get_IsHidden() at System.IO.Enumeration.FileSystemEnumerator`1.MoveNext() at System.Linq.Enumerable.LongCount[TSource](IEnumerable`1 source)
И более общий вопрос: как получить список всех фалов с определенным расширением (.docx, .xlsx, к примеру) кроме как отфильтровать полученный выше список?
(Сейчас пишу на линукс, но программа будет запускаться на windows)
Можно например как-то так - рекурсивно или используя итераторы
C#:
public IEnumerable<string> EnumerateFiles(string dir, string pattern)
{
Stack<string> directoryList = new Stack<string>();
directoryList.Push(dir);
while (directoryList.Count != 0)
{
var currentPath = directoryList.Pop();
string[] next = null;
try
{
next = Directory.GetFiles(currentPath, pattern);
}
catch { /* тут бы формировать список недоступных файлов/папок на всякий случай*/ }
if (next != null && next.Length != 0)
foreach (var file in next) yield return file;
try
{
next = Directory.GetDirectories(currentPath);
foreach (var subdir in next) directoryList.Push(subdir);
}
catch { }
}
}
В Directory.GetFiles можно использовать маску поиска ака search pattern. В Directory.EnumerateFiles вроде нет, но там можно довольно удобно использовать LINQ
надеюсь это не очередной говношкафчик на дотнете...
Последнее редактирование: