Упражнение. Работа с файловой системой
.NET можно использовать для поиска и возврата сведений о файлах и папках.
Компания Tailwind Traders имеет множество физических магазинов по всему миру. Каждую ночь каждый магазин создает файл с именем sales.json , содержащий общую сумму всех продаж за этот день. Эти файлы упорядочены в папках с идентификатором хранилища.
Примечание.
В этом модуле используются .NET CLI (интерфейс командной строки) и Visual Studio Code для локальной разработки. После завершения этого модуля вы сможете применять основные приемы, изученные в этом модуле, в среде разработки Visual Studio (Windows) или Visual Studio для Mac (macOS) либо продолжить работу в Visual Studio Code (Windows, Linux и macOS).
В этом модуле используется пакет SDK для .NET 8.0. Убедитесь, что установлен .NET 8.0, выполнив следующую команду в предпочтительном терминале команд:
dotnet --list-sdks
Выходные данные, аналогичные следующему примеру, отображаются:
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
Убедитесь, что в списке есть версия, которая начинается с цифры 8
. Если нет списка или команда не найдена, установите последний пакет SDK для .NET 8.0.
Клонирование проекта
В этом упражнении вы напишете программу .NET, которая выполняет поиск каталога и его подкаталогов для файлов с именем sales.json.
Начальный проект уже создан. Клонируйте его с помощью встроенного терминала в Visual Studio Code.
Откройте Visual Studio Code.
В главном меню выберите "Вид>терминала ", чтобы открыть окно терминала.
(Необязательно) В окне терминала перейдите в каталог, в который нужно скопировать файлы, например
c:\MyProjects
.В окне терминала выполните следующую команду, чтобы клонировать начальный проект и перейти к клонированного проекта:
git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files
Выполните следующую команду, чтобы создать консольный проект .NET:
dotnet new console -f net8.0 -n mslearn-dotnet-files -o .
Выполните следующую команду, чтобы открыть новый проект .NET в том же экземпляре Visual Studio Code:
code -a .
Совет
На этом этапе Visual Studio Code может предложить вам, что необходимые ресурсы для сборки и запуска проекта отсутствуют.
Нажмите треугольник с восклицательным знаком и выберите Перезапустить терминал, чтобы добавить файлы, позволяющие Visual Studio Code запускать и отлаживать проект.
В окне обозревателя в разделе mslearn-dotnet-files разверните папку хранилища и каждую из нумерованных папок внутри.
Поиск файлов sales.json
Следующие задачи создают программу для поиска всех sales.json файлов во всех папках mslearn-dotnet-files
проекта.
Включение пространства имен System.IO
В окне обозревателя выберите
Program.cs
файл, чтобы открыть его в редакторе.Вставьте следующий код в первую строку файла
Program.cs
, чтобы импортировать пространства именSystem.IO
иSystem.Collections.Generic
:using System.IO; using System.Collections.Generic;
Примечание.
Начиная с .NET 6, два оператора в предыдущем коде автоматически включаются в новый проект с помощью ImplcitUsings
группы свойств. Так как мы указали флаг -f net8.0
при создании нового консольного проекта, эти инструкции добавляются неявно. Однако в более старых проектах их необходимо включать в файл Program.cs
, и если оставить их в файле, это не повлияет на такие проекты.
Написание функции для поиска файлов sales.json
Создайте новую функцию с именем FindFiles
, которая принимает параметр folderName
.
Замените строку Console.WriteLine("Hello, World!"); следующим кодом:
IEnumerable<string> FindFiles(string folderName) { List<string> salesFiles = new List<string>(); var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories); foreach (var file in foundFiles) { // The file name will contain the full path, so only check the end of it if (file.EndsWith("sales.json")) { salesFiles.Add(file); } } return salesFiles; }
Вставьте под инструкциями
using
следующий код для вызова функцииFindFiles
. Этот код передает имя папки stores в качестве расположения для поиска файлов.var salesFiles = FindFiles("stores"); foreach (var file in salesFiles) { Console.WriteLine(file); }
Нажмите CTRL + S (или CMD + S в macOS), чтобы сохранить файл
Program.cs
.
Запуск программы
Введите следующую команду в окне терминала, чтобы запустить программу:
dotnet run
Программа должна возвратить следующие выходные данные:
stores/sales.json stores/201/sales.json stores/202/sales.json stores/203/sales.json stores/204/sales.json
Отлично! Вы успешно написали программу командной строки, которая обходит все папки в каталоге stores
и составляет список всех найденных файлов sales.json.
В этом примере путь к каталогу магазинов был довольно простым и в рабочем каталоге программы. На следующем уроке вы узнаете, как с помощью класса Path
сформировать сложные структуры, работающие в разных операционных системах.
Возникли проблемы?
Если у вас возникли проблемы с выполнением программы, ниже приведен полный код файла Program.cs
. Замените содержимое файла Program.cs
следующим кодом:
var salesFiles = FindFiles("stores");
foreach (var file in salesFiles)
{
Console.WriteLine(file);
}
IEnumerable<string> FindFiles(string folderName)
{
List<string> salesFiles = new List<string>();
var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (var file in foundFiles)
{
// The file name will contain the full path, so only check the end of it
if (file.EndsWith("sales.json"))
{
salesFiles.Add(file);
}
}
return salesFiles;
}