LINQ и каталоги файлов (C#)LINQ and file directories (C#)

Многие операции файловой системы по существу являются запросами и, следовательно, соответствуют свойствам LINQ.Many file system operations are essentially queries and are therefore well suited to the LINQ approach.

Запросы в этом разделе являются безопасными.The queries in this section are non-destructive. Они не используются для изменения содержимого исходных файлов или папок.They are not used to change the contents of the original files or folders. Это соответствует правилу о том, что запросы не должны вызывать никаких побочных эффектов.This follows the rule that queries should not cause any side-effects. Как правило, любой код (включая запросы, выполняющие операторы создания, изменения и удаления), изменяющий исходные данные, должен храниться отдельно от кода, который просто запрашивает данные.In general, any code (including queries that perform create / update / delete operators) that modifies source data should be kept separate from the code that just queries the data.

В этом разделе рассматриваются следующие вопросы.This section contains the following topics:

Практическое руководство. Запрос файлов с указанными атрибутами или именем (C#)How to query for files with a specified attribute or name (C#)
Демонстрация поиска файлов путем проверки одного или нескольких свойств его объекта FileInfo.Shows how to search for files by examining one or more properties of its FileInfo object.

Группировка файлов по расширению (LINQ) (C#)How to group files by extension (LINQ) (C#)
Демонстрация возвращения групп объектов FileInfo в зависимости от расширения имени файла.Shows how to return groups of FileInfo object based on their file name extension.

Получение общего числа байтов в наборе папок (LINQ) (C#)How to query for the total number of bytes in a set of folders (LINQ) (C#)
Демонстрация возвращения общего числа байтов во всех файлах в указанном дереве каталогов.Shows how to return the total number of bytes in all the files in a specified directory tree.

Практическое руководство. Сравнение содержимого двух папок (LINQ) (C#)How to compare the contents of two folders (LINQ) (C#)s
Демонстрация возвращения всех файлов, присутствующих в двух указанных папках, а также всех файлов, которые присутствуют в одной папке, но отсутствуют в другой.Shows how to return all the files that are present in two specified folders, and also all the files that are present in one folder but not the other.

Практическое руководство. Запрос самого большого файла или файлов в дереве папок (LINQ) (C#)How to query for the largest file or files in a directory tree (LINQ) (C#)
Демонстрация возвращения наибольшего или наименьшего файла либо определенного числа файлов в дереве каталогов.Shows how to return the largest or smallest file, or a specified number of files, in a directory tree.

Практическое руководство. Запрос повторяющихся файлов в дереве папок (LINQ) (C#)How to query for duplicate files in a directory tree (LINQ) (C#)
Демонстрация группирования всех имен файлов, находящихся в нескольких расположениях в указанном дереве каталогов.Shows how to group for all file names that occur in more than one location in a specified directory tree. Также показано, как выполнять более сложные сравнения на основе пользовательской функции сравнения.Also shows how to perform more complex comparisons based on a custom comparer.

Получение содержимого файлов в папке (LINQ) (C#)How to query the contents of files in a folder (LINQ) (C#)
Демонстрация итерации по папкам в дереве, открытия каждого файла и запроса содержимого файла.Shows how to iterate through folders in a tree, open each file, and query the file's contents.

КомментарииComments

Существуют некоторые сложности, связанные с созданием источника данных, который точно представляет содержимое файловой системы и корректно обрабатывает исключения.There is some complexity involved in creating a data source that accurately represents the contents of the file system and handles exceptions gracefully. В примерах этого раздела создается моментальный снимок коллекции объектов FileInfo, представляющих все файлы в указанной корневой папке и всех ее подпапках.The examples in this section create a snapshot collection of FileInfo objects that represents all the files under a specified root folder and all its subfolders. Фактическое состояние каждого объекта FileInfo может измениться в период между началом и окончанием выполнения запроса.The actual state of each FileInfo may change in the time between when you begin and end executing a query. Например, можно создать список объектов FileInfo для использования в качестве источника данных.For example, you can create a list of FileInfo objects to use as a data source. При попытке доступа к свойству Length в запросе объект FileInfo попытается получить доступ к файловой системе для обновления значения Length.If you try to access the Length property in a query, the FileInfo object will try to access the file system to update the value of Length. Если файл больше не существует, вы получите исключение FileNotFoundException в запросе, даже если не запрашиваете файловую систему напрямую.If the file no longer exists, you will get a FileNotFoundException in your query, even though you are not querying the file system directly. Некоторые запросы в этом разделе используют отдельный метод, который использует эти конкретные исключения в определенных случаях.Some queries in this section use a separate method that consumes these particular exceptions in certain cases. Другой возможностью является поддержка источника данных, обновляемого динамически с помощью FileSystemWatcher.Another option is to keep your data source updated dynamically by using the FileSystemWatcher.

См. такжеSee also