Alıştırma - Yollarla çalışma
.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.
Düzenleyicide, dosyanın ilk satırının
Program.csüzerine aşağıdaki kodu ekleyin. Bu kod,Directory.GetCurrentDirectorygeçerli dizinin yolunu almak ve yeni bir değişkendecurrentDirectorydepolamak için yöntemini kullanır:var currentDirectory = Directory.GetCurrentDirectory();Yeni eklediğiniz satırın arkasına aşağıdaki kodu ekleyin. Bu kod,
Path.Combinestoresyöntemini kullanır:var storesDirectory = Path.Combine(currentDirectory, "stores");İşlev çağrısındaki dizesini
storesFindFilesyeni değişkeniylestoresDirectorydeğ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); }Dosyayı kaydetmek için Ctrl+S (veya Cmd+S macOS) tuşlarına basın.
Programı komut satırından çalıştırın:
dotnet runProgram 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.jsonDö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.GetCurrentDirectorybu 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.
foreacharacılığıylafoundFilesyineleyen döngüde, yeni bir değişkeniftanımlamak için deyimininextensionüzerine aşağıdaki kod satırını ekleyin. Bu kod,Path.GetExtensionher dosyanın uzantısını almak için yöntemini kullanır.var extension = Path.GetExtension(file);deyimini
ifaş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
foreachkoda benzer görünmelidir:foreach (var file in foundFiles) { var extension = Path.GetExtension(file); if (extension == ".json") { salesFiles.Add(file); } }Dosyayı kaydetmek için Ctrl+S / Cmd+S tuşlarına basın.
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;
}