Поделиться через


LINQ и каталоги файлов (Visual Basic)

Многие операции файловой системы по существу являются запросами и, следовательно, соответствуют принципам LINQ.

Обратите внимание, что запросы в этом разделе являются безопасными. Они не используются для изменения содержимого исходных файлов или папок. Это соответствует правилу о том, что запросы не должны вызывать никаких побочных эффектов. Как правило, любой код (включая запросы, выполняющие операторы создания, изменения и удаления), изменяющий исходные данные, должен храниться отдельно от кода, который просто запрашивает данные.

В этом разделе рассматриваются следующие вопросы.

Практическое руководство. Запрос файлов с указанным атрибутом или именем (Visual Basic)
Демонстрация поиска файлов путем проверки одного или нескольких свойств его объекта FileInfo.

Практическое руководство. Группирование файлов по расширению (LINQ) (Visual Basic)
Демонстрация возвращения групп объектов FileInfo в зависимости от расширения имени файла.

Практическое руководство. Запрос общего количества байтов в наборе папок (LINQ) (Visual Basic)
Демонстрация возвращения общего числа байтов во всех файлах в указанном дереве каталогов.

Практическое руководство. Сравнение содержимого двух папок (LINQ) (Visual Basic)
Демонстрация возвращения всех файлов, присутствующих в двух указанных папках, а также всех файлов, которые присутствуют в одной папке, но отсутствуют в другой.

Практическое руководство. Запрос к крупнейшему файлу или файлам в дереве каталогов (LINQ) (Visual Basic)
Демонстрация возвращения наибольшего или наименьшего файла либо определенного числа файлов в дереве каталогов.

Практическое руководство. Запрос повторяющихся файлов в дереве каталогов (LINQ) (Visual Basic)
Демонстрация группирования всех имен файлов, находящихся в нескольких расположениях в указанном дереве каталогов. Также показано, как выполнять более сложные сравнения на основе пользовательской функции сравнения.

Запрос содержимого файлов в папке (LINQ) (Visual Basic)
Демонстрация итерации по папкам в дереве, открытия каждого файла и запроса содержимого файла.

Комментарии

Существуют некоторые сложности, связанные с созданием источника данных, который точно представляет содержимое файловой системы и корректно обрабатывает исключения. В примерах этого раздела создается моментальный снимок коллекции объектов FileInfo, представляющих все файлы в указанной корневой папке и всех ее подпапках. Фактическое состояние каждого объекта FileInfo может измениться в период между началом и окончанием выполнения запроса. Например, можно создать список объектов FileInfo для использования в качестве источника данных. При попытке доступа к свойству Length в запросе объект FileInfo попытается получить доступ к файловой системе для обновления значения Length. Если файл больше не существует, вы получите исключение FileNotFoundException в запросе, даже если не запрашиваете файловую систему напрямую. Некоторые запросы в этом разделе используют отдельный метод, который использует эти конкретные исключения в определенных случаях. Другой возможностью является поддержка источника данных, обновляемого динамически с помощью FileSystemWatcher.

См. также