Упражнение. Работа с путями

Завершено

Класс Path и функция Directory.GetCurrentDirectory в .NET — это два способа определения и создания путей файловой системы.

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

В этом упражнении вы используете Path класс и Directory.GetCurrentDirectory улучшаете программу, чтобы найти любой файл с расширением .json.

Использование текущего каталога и объединение путей

В текущем коде файла Program.cs передается статическое расположение папки stores. Теперь мы изменим этот код, чтобы использовать Directory.GetCurrentDirectory значение вместо передачи имени статической папки.

  1. В редакторе вставьте следующий код перед первой строкой файла Program.cs. Этот код использует метод Directory.GetCurrentDirectory, чтобы получить путь к текущему каталогу и сохранить его в новой переменной currentDirectory:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. Вставьте следующий код после только что добавленной строки. Этот код использует метод Path.Combine, чтобы создать полный путь к каталогу stores и сохранить его в новой переменной storesDirectory:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. Замените строку stores в вызове FindFiles функции новой переменной storesDirectory:

    var salesFiles = FindFiles(storesDirectory);
    

    Теперь начало файла должно выглядеть примерно так, как показано в следующем фрагменте кода:

    var currentDirectory = Directory.GetCurrentDirectory();
    var storesDirectory = Path.Combine(currentDirectory, "stores");
    var salesFiles = FindFiles(storesDirectory);
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  4. Нажмите CTRL + S (или CMD + S в macOS), чтобы сохранить файл.

  5. Запустите программу из командной строки:

    dotnet run
    
  6. Программа должна возвратить следующие выходные данные:

    /home/username/dotnet-files/stores/sales.json  
    /home/username/dotnet-files/stores/201/sales.json  
    /home/username/dotnet-files/stores/202/sales.json  
    /home/username/dotnet-files/stores/203/sales.json  
    /home/username/dotnet-files/stores/204/sales.json  
    

    Обратите внимание, что возвращаемые имена файлов включают полный путь в системе. Это обусловлено тем, что метод Directory.GetCurrentDirectory возвращает полный путь к текущему расположению.

Поиск всех JSON-файлов

Вместо поиска только файлов sales.json программа должна искать все файлы с расширением JSON. Для этого можно использовать Path.GetExtension метод для проверки расширения для каждого файла.

  1. В цикле foreach , который выполняет итерацию foundFiles, вставьте следующую строку кода над if инструкцией, чтобы определить новую переменную extension. Этот код использует метод Path.GetExtension для получения расширения каждого файла.

        var extension = Path.GetExtension(file);
    
  2. Измените инструкцию if так, чтобы она стала похожа на следующую строку кода. Эта инструкция проверяет, равно ли расширение файла JSON.

           if (extension == ".json")
    

    Цикл foreach должен выглядеть примерно так, как показано в следующем коде:

    foreach (var file in foundFiles)
    {
        var extension = Path.GetExtension(file);
        if (extension == ".json")
        {
            salesFiles.Add(file);
        }
    }
    
  3. Нажмите клавиши CTRL+S / CMD+S, чтобы сохранить файл.

  4. Запустите программу из командной строки:

    dotnet run
    

    Теперь в выходных данных отображаются все файлы .json в каждом из каталогов с идентификаторами хранилища:

    /home/username/dotnet-files/stores/sales.json  
    /home/username/dotnet-files/stores/201/sales.json
    /home/username/dotnet-files/stores/201/salestotals.json  
    /home/username/dotnet-files/stores/202/sales.json
    /home/username/dotnet-files/stores/202/salestotals.json    
    /home/username/dotnet-files/stores/203/sales.json  
    /home/username/dotnet-files/stores/203/salestotals.json  
    /home/username/dotnet-files/stores/204/sales.json  
    /home/username/dotnet-files/stores/204/salestotals.json  
    

Отличная работа! Вы использовали модуль класс Path и метод Directory.GetCurrentDirectory, чтобы сделать программу надежнее. Из следующего урока вы узнаете, как создавать каталоги и перемещать файлы между расположениями.

Возникли проблемы?

На тот случай, если вы столкнулись с проблемой в процессе выполнения этого упражнения, ниже приведен готовый код. Удалите все в Program.cs и замените его следующим решением:

var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");

var salesFiles = FindFiles(storesDirectory);
    
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)
    {
        var extension = Path.GetExtension(file);
        if (extension == ".json")
        {
            salesFiles.Add(file);
        }
    }

    return salesFiles;
}