LINQ и каталоги файлов
Многие операции с файловой системой, по сути, являются запросами и, следовательно, подходят для LINQ.
Примечание
Если требуется выполнить программные запросы к содержимому нескольких типов файлов и документов, рассмотрите возможность использования средства поиска Windows Desktop Search Engine.Несмотря на то, что его в данный момент нельзя запросить с помощью LINQ, оно предоставляет мощную службу индексирования, которая эффективно управляет сложными процессами файловой системы.
Обратите внимание, что запросы в этом разделе являются безопасными. Они не используются для изменения содержимого исходных файлов или папок. Это отвечает правилу о том, что запросы не должны быть причиной никаких побочных эффектов. В целом, любой код (включая запросы, выполняющие операторы создания / обновления / удаления), изменяющий исходные данные, должен храниться отдельно от кода, который просто запрашивает данные.
В этом разделе рассматриваются следующие вопросы.
Практическое руководство. Запрос файлов с указанными атрибутами или именем
Описание способов поиска файлов путем проверки одного или нескольких свойств его объекта FileInfo.Практическое руководство. Группировка файлов по расширению (LINQ)
Описание способов возврата групп объекта FileInfo на основе расширения имени файла.Практическое руководство. Запрос общего числа байтов в наборе папок (LINQ)
Описание способов возврата общего числа байт во всех файлах в указанном дереве папок.Практическое руководство. Сравнение содержимого двух папок (LINQ)
Описание способов возврата всех файлов, находящихся в двух указанных папках, а также всех файлов, находящихся в одной папке, но отсутствующих в другой.Практическое руководство. Запрос самого большого файла или файлов в дереве папок (LINQ)
Описание способов возврата наибольшего или наименьшего файла или определенного числа файлов в дереве каталога.Практическое руководство. Запрос повторяющихся файлов в дереве каталогов (LINQ)
Описание способов группировки всех имен файлов, находящихся в нескольких местах в указанном дереве каталогов. Описание способов выполнения более сложных сравнений с использованием пользовательской функции сравнения.Практическое руководство. Запрос содержимого файлов в папке (LINQ)
Описание способов итерации папок в дереве, открытия каждого файла и выполнения запроса к содержимому файла.
Комментарии
Существуют некоторые сложности, сопряженные с созданием источника данных, который точно представляет содержимое файловой системы и корректно обрабатывает исключения. В примерах этого раздела создается моментальный снимок коллекции объектов FileInfo, представляющей все файлы в указанной корневой папке и всех ее подпапках. Фактическое состояние каждого FileInfo может измениться за время между началом и окончанием выполнения запроса. Например, можно создать список объектов FileInfo для использования в качестве источника данных. При попытке доступа к свойству Length в запросе объект FileInfo будет пытаться получить доступ к файловой системе для обновления значения Length. Если файл больше не существует, в запросе будет создано исключение FileNotFoundException несмотря на то, что не выполняется непосредственный запрос файловой системы. Некоторые запросы в этом разделе используют отдельные методы, которые иногда используют эти конкретные исключения. Другой возможностью является поддержка источника данных обновленным динамически с помощью FileSystemWatcher.