Работа с файловой системой
.NET содержит встроенные типы для работы с файловой системой, расположенные в пространстве имен System.IO
.
Здесь вы узнаете о типах, доступных с System.IO
помощью C# для чтения файловой системы для обнаружения файлов и каталогов.
Сценарий
Крупные розничные компании часто записывают данные в файлы, чтобы их можно было обработать в пакетном режиме.
Каждый из магазинов Tailwind Traders записывает свои объемы продаж в файл, который затем отправляется в центральное расположение. Чтобы использовать эти файлы, компании необходимо создать пакетный процесс, который может работать с файловой системой.
Включение пространства имен System.IO
Пространство имен System.IO содержит встроенные типы, которые позволяют взаимодействовать с файлами и каталогами. Например, можно получить коллекции файлов и каталогов на основе критериев поиска и get
set
свойств файлов и каталогов. Кроме того, типы из пространства имен 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 файлы.