Поиск файлов с расширением c
Обновлено: 04.07.2024
Задача получения списка файлов или папок в другой папке часто бывает при написании программы, поэтому, чтобы рецепт всегда был под рукой, решил написать коротенькую статью.
Получить список файлов в папке
Для получения списка файлов можно воспользоваться методом GetFiles.
Пример поиска файлов:
Метод GetFiles может принимать 3 параметра, из которых первый обязательный:
GetFiles(String path, String pattern, SearchOption options)
path - путь к папке, в которой ищем файлы;
pattern - шаблон поиска файлов (например, *.txt или ??abc.doc);
options - способ поиска, указывающий нужно искать только в текущей папке (SearchOption.TopDirectoryOnly) или во вложенных тоже (SearchOption.AllDirectories).
Пример поиска файлов по шаблону смотрите ниже (рекурсивный поиск).
Метод EnumerateFiles так же может принимать 3 параметра:
path - путь к папке, в которой ищем файлы;
pattern - шаблон поиска файлов;
options - способ поиска.
Пример поиска файлов методом EnumerateFiles:
Как видим, поиск методом EnumerateFiles аналогичен GetFiles, однако, он начнется сразу, до получения всего списка файлов, что может быть актуальным при очень большом количестве файлов.
Получить список папок в папке
Для получения списка папок можно воспользоваться методом GetDirectories.
Пример поиска папок с помощью GetDirectories:
Метод GetDirectories может принимать 3 параметра, из которых первый обязательный:
GetDirectories(String path, String pattern, SearchOption options)
path - путь к папке, в которой ищем файлы;
pattern - шаблон поиска файлов (например, *.txt или ??abc.doc);
options - способ поиска, указывающий нужно искать только в текущей папке (SearchOption.TopDirectoryOnly) или во вложенных тоже (SearchOption.AllDirectories).
Метод EnumerateDirectories аналогично GetDirectories принимает 3 параметра:
path - путь к папке, в которой ищем файлы;
pattern - шаблон поиска файлов;
options - способ поиска.
Пример поиска папок с помощью EnumerateDirectories:
Примечание: Во всех способах получения файлов и папок можно во втором параметре указывать шаблон поиска pattern, однако в нем можно использовать только * (любое количество любых символов) и ? (один любой символ) для указания шаблона поиска, регулярные выражения не поддерживаются.
Получить список файлов по шаблону рекурсивно
В этом случае нужно лишь добавить 2-й параметр, в котором указываем маску файлов и 3-й параметр, означающий что нужно искать файлы так же во вложенных папках.
Однако, у этого способа есть недостаток - в случае, если в какую-то папку нет доступа, получится ошибка и список файлов не будет получен совсем.
Рекурсивно получить список всех файлов и папок
Этот пример рекурсивного поиска файлов и папок не прервется в случае ошибки, а продолжится дальше. Вместо массива здесь используется List для записи списка файлов и папок.
Плюсом такого рекурсивного поиска так же является то, что можно еще и контролировать уровень вложенности и делать, например, отступы для разных уровней.
Читайте также: