Работа с файловой системой

Завершено

.NET содержит встроенные типы для работы с файловой системой, расположенные в пространстве имен System.IO.

Здесь вы узнаете о типах, доступных с System.IO помощью C# для чтения файловой системы для обнаружения файлов и каталогов.

Сценарий

Крупные розничные компании часто записывают данные в файлы, чтобы их можно было обработать в пакетном режиме.

Каждый из магазинов Tailwind Traders записывает свои объемы продаж в файл, который затем отправляется в центральное расположение. Чтобы использовать эти файлы, компании необходимо создать пакетный процесс, который может работать с файловой системой.

Включение пространства имен System.IO

Пространство имен System.IO содержит встроенные типы, которые позволяют взаимодействовать с файлами и каталогами. Например, можно получить коллекции файлов и каталогов на основе критериев поиска и getset свойств файлов и каталогов. Кроме того, типы из пространства имен System.IO можно использовать для синхронного и асинхронного чтения и записи потоков данных и файлов.

Пока мы сосредоточимся лишь на том, что нужно знать для работы с каталогами с помощью класса Directory из пространства имен System.IO. Класс Directory предоставляет статические методы для создания, перемещения и перечисления элементов в каталогах и вложенных каталогах.

Получение списка всех каталогов

Класс Directory часто используется для перечисления каталогов (или перечисления). Например, структура файла Tailwind Traders имеет корневую папку, называемую хранилищами. В этой папке находятся вложенные папки, упорядоченные по номеру магазина, и внутри этих папок находятся файлы итогов продаж и инвентаризации. Структура выглядит как в следующем примере:

📂 stores
    📄 sales.json
    📄 totals.txt
    📂 201
       📄 sales.json
       📄 salestotals.json
       📄 inventory.txt
    📂 202

Для чтения и перечисления имен каталогов верхнего уровня используйте функцию Directory.EnumerateDirectories.

IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");

foreach (var dir in listOfDirectories) {
    Console.WriteLine(dir);
}

// Outputs:
// stores/201
// stores/202

Получение списка файлов в указанном каталоге

Для получения списка имен всех файлов в каталоге можно использовать функцию Directory.EnumerateFiles.

IEnumerable<string> files = Directory.EnumerateFiles("stores");

foreach (var file in files)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/sales.json

Получение списка всего содержимого в каталоге и всех подкаталогах

Функции Directory.EnumerateDirectories и Directory.EnumerateFiles имеют перегрузку, которая принимает параметр для указания шаблонов поиска файлов и каталогов.

Они также имеют еще одну перегрузку, которая принимает параметр для указания того, следует ли выполнять рекурсивный обход указанной папки и всех ее вложенных папок.

// Find all *.txt files in the stores folder and its subfolders
IEnumerable<string> allFilesInAllFolders = Directory.EnumerateFiles("stores", "*.txt", SearchOption.AllDirectories);

foreach (var file in allFilesInAllFolders)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/201/inventory.txt

В следующем упражнении вы используете Directory класс для динамического чтения с помощью основного каталога хранилища Tailwind Traders, чтобы найти все sales.json файлы.

Проверьте свои знания

1.

Какую из следующих задач можно выполнять с помощью функции Directory.EnumerateFiles?