Alıştırma - Yollarla çalışma

Tamamlandı

.NET Path sınıfı ve Directory.GetCurrentDirectory dosya sistemi yollarını tanımlamanın ve oluşturmanın iki yoludur.

Önceki alıştırmada, bir klasörde veya alt klasörlerinde yer alan sales.json dosyalarından herhangi birini bulmak için bir program yazdınız.

Bu alıştırmada, programı .json uzantısına sahip Path bir dosyayı bulacak şekilde geliştirmek için Directory.GetCurrentDirectory sınıfını ve kullanırsınız.

Geçerli dizini kullanma ve yolları birleştirme

Geçerli Program.cs kodunda stores klasörünün statik konumunu geçiriyorsunuz. Şimdi bu kodu statik klasör adı geçirmek yerine değerini kullanacak Directory.GetCurrentDirectory şekilde değiştireceğiz.

  1. Düzenleyicide, dosyanın ilk satırının Program.cs üzerine aşağıdaki kodu ekleyin. Bu kod, Directory.GetCurrentDirectory geçerli dizinin yolunu almak ve yeni bir değişkende currentDirectorydepolamak için yöntemini kullanır:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. Yeni eklediğiniz satırın arkasına aşağıdaki kodu ekleyin. Bu kod, Path.Combine storesyöntemini kullanır:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. İşlev çağrısındaki dizesini storesFindFiles yeni değişkeniyle storesDirectorydeğiştirin:

    var salesFiles = FindFiles(storesDirectory);
    

    Dosyanızın üst kısmı artık aşağıdaki kod parçacığına benzer olmalıdır:

    var currentDirectory = Directory.GetCurrentDirectory();
    var storesDirectory = Path.Combine(currentDirectory, "stores");
    var salesFiles = FindFiles(storesDirectory);
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  4. Dosyayı kaydetmek için Ctrl+S (veya Cmd+S macOS) tuşlarına basın.

  5. Programı komut satırından çalıştırın:

    dotnet run
    
  6. Program aşağıdaki çıkışı göstermelidir:

    /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  
    

    Döndürülen dosya adlarının tam sistem yolunu içerdiğine dikkat edin. Yöntem geçerli konumun tam yolunu döndürdüğünden Directory.GetCurrentDirectory bu yol eklenir.

Tüm .json dosyalarını bulma

Programın yalnızca sales.json dosyaları aramak yerine .json uzantısına sahip herhangi bir dosyayı araması gerekir. Bunu yapmak için yöntemini kullanarak Path.GetExtension her dosyanın uzantısını deleyebilirsiniz.

  1. foreach aracılığıyla foundFilesyineleyen döngüde, yeni bir değişken iftanımlamak için deyiminin extension üzerine aşağıdaki kod satırını ekleyin. Bu kod, Path.GetExtension her dosyanın uzantısını almak için yöntemini kullanır.

        var extension = Path.GetExtension(file);
    
  2. deyimini if aşağıdaki kod satırı gibi görünecek şekilde değiştirin. Bu deyim, dosyanın uzantısının .json eşit olup olmadığını denetler.

           if (extension == ".json")
    

    Döngü aşağıdaki foreach koda benzer görünmelidir:

    foreach (var file in foundFiles)
    {
        var extension = Path.GetExtension(file);
        if (extension == ".json")
        {
            salesFiles.Add(file);
        }
    }
    
  3. Dosyayı kaydetmek için Ctrl+S / Cmd+S tuşlarına basın.

  4. Programı komut satırından çalıştırın:

    dotnet run
    

    Çıktı artık mağaza kimliği dizinlerinin her birinde tüm .json dosyalarını gösterir:

    /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  
    

Harika iş çıkardınız! Path sınıfını ve Directory.GetCurrentDirectory metodunu kullanarak programı çok daha sağlam hale getirdiniz. Bir sonraki ünitede dizin oluşturmayı ve dosyaları farklı konumlara taşımayı öğreneceksiniz.

Takıldınız mı?

Alıştırmanın herhangi bir yerinde takıldıysanız kodun tamamını aşağıda bulabilirsiniz. Program.cs içindeki her şeyi kaldırın ve şu çözümle değiştirin:

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;
}