Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 58

Получение списка файлов из папок и подпапок

13.03.2019, 10:14. Показов 2727. Ответов 12

Студворк — интернет-сервис помощи студентам
Здравствуйте, нужно получить список всех файлов в папках и подпапках учетной записи windows (C:\Users\123\)
Использую код:
C#
1
string[] allfiles = System.IO.Directory.GetFiles(@"C:\Users\123\", "*.*", System.IO.SearchOption.AllDirectories);
получаю ошибку:
System.UnauthorizedAccessException: "Отказано в доступе по пути "C:\Users\123\Documents\Мои видеозаписи"."
Как можно получить список всех файлов в папках и подпапках обрабатывая данное исключение, то есть пропускать те папки к которым нет доступа?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.03.2019, 10:14
Ответы с готовыми решениями:

Получение списка нужных папок и подпапок в указанной папке
Здравствуйте. Вот код: procedure TForm1.SearchDirs(aPath, aAddPath: AnsiString; aMask: TstringList; aList: TListBox); var SR :...

Получение списка файлов, подпапок, с WEB страницы
Всем привет! Ребят, нужна помощь. Допустим, у меня имеется сайт: blablalol.ru/myfiles В каталоге myfiles имеется несколько папок,...

Получение путей папок и подпапок
помогите с написанием кода для поиска папок и подпапок с получением списка путей

12
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
13.03.2019, 12:36
Запустится с соответствующими правами.
0
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 58
13.03.2019, 12:56  [ТС]
Мне еще нужно, например исключить из поиска папку APP, как это сделать?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
13.03.2019, 15:44
terebob, в профиле есть ряд папок куда стандартные методы поиска не могут зайти даже с elevated правами. Необходимо делать поиск по отдельным каталогам с обработкой исключений. Для примера посмотри готовый метод SafeEnumerateFiles.

Пропуск каталогов можно сделать уже после поиска или изменить метод поиска чтобы он умел это делать.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
13.03.2019, 16:04
C#
1
2
3
4
5
6
7
IEnumerable<string> fileNames = new FileSystemEnumerable<string>(@"c:\Users\123\", (ref FileSystemEntry entry) => entry.ToFullPath(), new EnumerationOptions { IgnoreInaccessible = true, RecurseSubdirectories = true})
{
    ShouldIncludePredicate = (ref FileSystemEntry entry) => !entry.IsDirectory,
};
 
foreach (var file in fileNames)
    Console.WriteLine(file);
0
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 58
13.03.2019, 17:18  [ТС]
Someone007,
Ошибка CS0246 Не удалось найти тип или имя пространства имен "EnumerationOptions" (возможно, отсутствует директива using или ссылка на сборку).
Ошибка CS0246 Не удалось найти тип или имя пространства имен "FileSystemEntry" (возможно, отсутствует директива using или ссылка на сборку).
Ошибка CS0246 Не удалось найти тип или имя пространства имен "FileSystemEntry" (возможно, отсутствует директива using или ссылка на сборку).
Ошибка CS0246 Не удалось найти тип или имя пространства имен "FileSystemEnumerable<>" (возможно, отсутствует директива using или ссылка на сборку).
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
13.03.2019, 17:51
terebob, пример Someone007 работает в .NET Core 2.1 и выше.
0
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 58
14.03.2019, 10:11  [ТС]
Почему у меня не работает?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
14.03.2019, 13:05
terebob, если у тебя приложение .NET Core, то добавление
C#
1
2
using System.IO;
using System.IO.Enumeration;
решит проблему. Иначе советую использовать мой пример.
0
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 58
14.03.2019, 15:30  [ТС]
Вызываю Ваш метод и ничего не происходит, в чём ошибка?

C#
1
IEnumerable<string>  s = SafeEnumerateFiles(TextBox.Text, "*.*");
Сам метод:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
        /// <summary>
        /// Возвращает перечисляемую коллекцию имен файлов которые соответствуют шаблону в указанном каталоге, с дополнительным просмотром вложенных каталогов
        /// </summary>
        /// <param name="path">Полный или относительный путь катага в котором выполняется поиск</param>
        /// <param name="searchPattern">Шаблон поиска файлов</param>
        /// <param name="searchOption">Одно из значений перечисления SearchOption указывающее нужно ли выполнять поиск во вложенных каталогах или только в указанном каталоге</param>
        /// <returns>Возвращает перечисляемую коллекцию полных имен файлов</returns>
        private static IEnumerable<string> SafeEnumerateFiles(string path, string searchPattern = "*.*", SearchOption searchOption = SearchOption.TopDirectoryOnly)
        {
            var dirs = new Stack<string>();
            dirs.Push(path);
 
            while (dirs.Count > 0)
            {
                string currentDirPath = dirs.Pop();
                if (searchOption == SearchOption.AllDirectories)
                {
                    try
                    {
                        string[] subDirs = Directory.GetDirectories(currentDirPath);
                        foreach (string subDirPath in subDirs)
                        {
                            dirs.Push(subDirPath);
                        }
                    }
                    catch (UnauthorizedAccessException)
                    {
                        continue;
                    }
                    catch (DirectoryNotFoundException)
                    {
                        continue;
                    }
                }
 
                string[] files = null;
                try
                {
                    files = Directory.GetFiles(currentDirPath, searchPattern);
                }
                catch (UnauthorizedAccessException)
                {
                    continue;
                }
                catch (DirectoryNotFoundException)
                {
                    continue;
                }
 
                foreach (string filePath in files)
                {
                    yield return filePath;
                }
            }
        }
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
14.03.2019, 16:33
terebob, вот так нужно вызывать если нужен весь список сразу
C#
1
string[] allfiles = SafeEnumerateFiles(TextBox.Text, "*.*").ToArray();
Или использовать цикл для перебора по одному
C#
1
2
3
foreach (string path in SafeEnumerateFiles(TextBox.Text, "*.*"))
{
}
0
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 58
14.03.2019, 17:40  [ТС]
OwenGlendower, Спасибо!
Можно ли сделать в Вашем методе
C#
1
string searchPattern = "*.*"
поиск по нескольким критериям, например "*.pdf" и ".png"? Можно ли сразу делать фильтрацию файлов по дате создания, например заносить в массив только те файлы, которые созданы сегодня?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
14.03.2019, 17:55
Цитата Сообщение от terebob Посмотреть сообщение
Можно ли сделать в Вашем методе поиск по нескольким критериям, например "*.pdf" и ".png"?
Можно. Принимаем массив шаблонов и добавляем поиск по ним.

Цитата Сообщение от terebob Посмотреть сообщение
Можно ли сразу делать фильтрацию файлов по дате создания, например заносить в массив только те файлы, которые созданы сегодня?
Тоже можно. В случае имеет смысл перейти на DirectoryInfo/FileInfo чтобы сразу получать не только имя файла, но и сопутствующую информацию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2019, 17:55
Помогаю со студенческими работами здесь

Получение списка файлов и папок на сайте
подсажите можно ли акто реализовать на пехп сабж, офлаин бразеры этоже могут?

Рекурсивный поиск папок, подпапок и файлов
Здравствуйте, Есть программа которая ищет папки, подпапки и файлы, как можно сделать, чтобы все данные об папка, подпапках и файлах...

Вывести список папок, подпапок и файлов в них
Нужно вывести вот такую стркутуру: main ..папка1 ....подпапка1 ......файл1 ......файл2 ......файл3 ....подпапка2 ..папка2

Получение списка подпапок в папке
Доброго времени суток, форумчане! Недавно я начал разработку одной программки, и столкнулся с проблемой вывода подпапок в указанной...

Вывод без расширения списка OGG файлов из тек. папки и подпапок в лог
Привет. Нужно вывести много имён OGG файлов в текущей папке и подпапках без расширения в лог. Я смог это сделать, но только с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru