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


LINQ и каталоги файлов

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

Примечание

Если требуется выполнить программные запросы к содержимому нескольких типов файлов и документов, рассмотрите возможность использования средства поиска Windows Desktop Search Engine.Несмотря на то, что его в данный момент нельзя запросить с помощью LINQ, оно предоставляет мощную службу индексирования, которая эффективно управляет сложными процессами файловой системы.

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

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

Комментарии

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

См. также

Основные понятия

LINQ to Objects