C# Sistem Dosyasını Ustalaşmak
[[academy-video-youtube({"vid": "9mUuJIKq40M", "start_time": "0", "title": "Mastering C# System File", "creator": "Tim Corey", "length": "35m 07s"})]]
C#, dosya sistemiyle etkileşim kurmak için sağlam yetenekler sağlar; dosya manipülasyonu, dizin yönetimi ve bilgi alma gibi görevleri mümkün kılar. Tim Corey, "Working With The File System in C# - Managing Folders and Files" başlıklı videosunda C# kullanarak dosyalar ve dizinlerle çalışma temellerini inceler.
Bu makale, C#'daki dosya sistemi işlemlerine genel bir bakış sağlamayı ve görevlerin otomasyonunu, dizinlerin yönetimini ve dosyaların ele alınmasını vurgulamayı amaçlar.
Giriş
C#'ta, System.IO ad alanı dosya sistemiyle etkileşim kurmak için güçlü sınıflar sağlar. Bu sınıflar, File, FileInfo, Directory ve DirectoryInfo gibi, dosya oluşturma, verileri okuma, dosyalara yazma ve belirtilen bir yolda belirtilen bir dosyanın zaten mevcut olup olmadığını kontrol etme gibi çeşitli dosya işlemleri yapmanızı sağlar. Bu sınıfları kullanarak, metin dosyaları, ikili dosyalar ve çeşitli uzantılı dosyalarla çalışabilirsiniz. Create(), Exists() ve Delete() gibi yöntemler, geliştiricilerin dosyaları ve dizinleri etkili bir şekilde yönetmelerine olanak tanır.
Örneğin, File sınıfı, bir dosyanın zaten mevcut olup olmadığını kontrol etmek, yeni bir dosya oluşturmak veya farklı modlarda (okuma, yazma veya ekleme gibi) dosya açmak için statik yöntemler içerir. FileInfo sınıfını kullanarak bir dosya hakkında daha fazla ayrıntı, örneğin oluşturulma zamanı veya tam yolunu alabilirsiniz. DirectoryInfo sınıfı, dizinlerle çalışmanıza, dosyaları almanıza veya yeni dizinler oluşturmanıza olanak tanır. Bu sınıflar ve yöntemler, mevcut dosyalar ve yeni dosyaları ele almak, birden fazla dosyayı yönetmek ve hatta bayt düzeyinde dosya verilerini işlemek için esneklik sağlar, bu da C#'ı dosya sistemi işlemleri için güçlü bir araç haline getirir.
Tim, C#'ın dosya görevlerini otomatikleştirmek için güçlü özelliklerini, yedekleme oluşturma, dosyaları düzenleme ve dosya bilgilerini alma gibi örneklerle vurgulayarak başlar. Pratik örnekler ve eğitim kaynakları ile C# öğrenmeyi kolaylaştırma amacını belirterek videoyu tanıtır.
Bir Demo Konsol Uygulaması Oluşturma
Tim, .NET Framework kullanarak "FileSystemDemo" adlı yeni bir konsol uygulaması oluşturarak işe sıfırdan başlar. Bu gösterim için .NET Core yerine .NET Framework'ü tercih ettiğini vurgular.
using System;
using System.IO;
namespace FileSystemDemo
{
class Program
{
static void Main(string[] args)
{
Console.ReadLine();
}
}
}using System;
using System.IO;
namespace FileSystemDemo
{
class Program
{
static void Main(string[] args)
{
Console.ReadLine();
}
}
}Kök Yolunu Ayarlama
Tim, demoyu için sistemindeki belirli bir dizine işaret eden bir kök yol değişkeni ayarlıyor.
string rootPath = @"C:\temp\demos\filesystem";string rootPath = @"C:\temp\demos\filesystem";@ sembolünün, yolda geriye eğik çizgilerin kaçış karakteri olmadan kullanılmasına izin verdiğini açıklıyor.
Yoldaki Tüm Dizinleri Okuma
Tim, belirtilen kök yolda tüm dizinlerin nasıl alınacağını, Directory.GetDirectories yöntemi kullanarak gösteriyor.
string[] directories = Directory.GetDirectories(rootPath);
foreach (string directory in directories)
{
Console.WriteLine(directory);
}string[] directories = Directory.GetDirectories(rootPath);
foreach (string directory in directories)
{
Console.WriteLine(directory);
}Bu kod, kök dizindeki tüm alt dizinlerin tam yollarını yazdırır.

Alt Dizinleri Özyinelemeli Olarak Okuma
Aramaya alt dizinleri dahil etmek için Tim, arama desenini ve arama seçeneklerini GetDirectories yöntemine ekliyor.
string[] allDirectories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories);
foreach (string directory in allDirectories)
{
Console.WriteLine(directory);
}string[] allDirectories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories);
foreach (string directory in allDirectories)
{
Console.WriteLine(directory);
}Bu değişiklik, aramanın tüm iç içe alt dizinleri dahil etmesini sağlar.
Yoldaki Tüm Dosyaları Okuma
Tim, dizin sınıfı ve belirtilen kök yoldaki tüm dosyaların nasıl alınacağını, Directory.GetFiles yöntemi kullanarak gösteriyor.
string[] files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
Console.WriteLine(file);
}string[] files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
Console.WriteLine(file);
}Bu kod, kök dizin ve alt dizinlerindeki tüm dosyaların tam yollarını yazdırır.

Dosya Adlarını ve Yollarını Çıkarma
Tim, dosya adlarını ve yollarını çıkarmak için Path sınıfını nasıl kullanacağınızı açıklıyor. Bu, dosya uzantısı olmadan dosya adını ve her dosyanın dizin adını almayı içerir.
foreach (string file in files)
{
Console.WriteLine(Path.GetFileName(file)); // File name with extension
Console.WriteLine(Path.GetFileNameWithoutExtension(file)); // File name without extension
Console.WriteLine(Path.GetDirectoryName(file)); // Directory name
}foreach (string file in files)
{
Console.WriteLine(Path.GetFileName(file)); // File name with extension
Console.WriteLine(Path.GetFileNameWithoutExtension(file)); // File name without extension
Console.WriteLine(Path.GetDirectoryName(file)); // Directory name
}Bu kod parçacığı, belirtilen yoldaki aynı dosyanın farklı bölümlerini nasıl çıkaracağınızı ve yazdıracağınızı gösterir.
Dosya Bilgilerini Alma
Tim, (12:10) FileInfo sınıfını kullanarak bir dosya hakkında ayrıntılı bilgilerin nasıl alınacağını gösteriyor. Bu, dosya boyutunu, son erişim zamanını, oluşturulma zamanını ve diğer niteliklerini almayı içerir.
foreach (string file in files)
{
FileInfo info = new FileInfo(file);
Console.WriteLine($"{Path.GetFileName(file)}: {info.Length} bytes");
}foreach (string file in files)
{
FileInfo info = new FileInfo(file);
Console.WriteLine($"{Path.GetFileName(file)}: {info.Length} bytes");
}Bu kod parçacığı dosya adı ve boyutunu bayt olarak yazdırır. Tim, bu boyutu tekrar tekrar 1024'e bölerek kilobayt veya megabayt cinsinden dönüştürebileceğinizi belirtir.
FileInfo sınıfının başka kullanışlı özellikler sağladığını daha ayrıntılı açıklıyor:
LastWriteTime: Dosyanın son değiştirilme zamanı.LastAccessTime: Dosyanın son erişilme zamanı.CreationTime: Dosyanın oluşturulma zamanı.Attributes: Dosya öznitelikleri, örneğin salt okunur veya arşiv.
Automating File System Tasks with C
Tim (15:11)'de C#'ı kullanarak çeşitli dosya sistemi görevlerini otomatikleştirme yöntemlerini tartışır. Bu, dizin oluşturmayı, dosyaların veya dizinlerin varlığını doğrulamayı ve diğer tekrar eden görevleri içerebilir.
Bir Dizin Var Mı Doğrulama
Tim, Directory.Exists yöntemi kullanarak bir dizinin mevcut olup olmadığını nasıl kontrol edeceğinizi gösteriyor. Bu, operasyonlar gerçekleştirmeden önce gerekli dizinlerin varlığını garanti etmek için faydalıdır.
string newPath = @"C:\temp\demos\filesystem\subfolderC";
if (Directory.Exists(newPath))
{
Console.WriteLine("Directory exists");
}
else
{
Console.WriteLine("Directory does not exist");
}string newPath = @"C:\temp\demos\filesystem\subfolderC";
if (Directory.Exists(newPath))
{
Console.WriteLine("Directory exists");
}
else
{
Console.WriteLine("Directory does not exist");
}Bu kod, bir dizinin varlığını kontrol eder ve uygun bir mesaj yazdırır.
Yeni Bir Dizin Oluşturma
Tim, Directory.CreateDirectory yöntemi kullanarak yeni bir dizin nasıl oluşturulacağını açıklıyor. Bu yöntem, belirtilen yolda zaten yoksa tüm dizinleri ve alt dizinleri oluşturur.
string newPath = @"C:\temp\demos\filesystem\subfolderC\sub-subfolderD";
Directory.CreateDirectory(newPath);
Console.WriteLine("Directories created");string newPath = @"C:\temp\demos\filesystem\subfolderC\sub-subfolderD";
Directory.CreateDirectory(newPath);
Console.WriteLine("Directories created");Tim, bu yöntemin belirtilmiş olan yol ve alt dizinleri var olan herhangi bir dosya veya dizin üzerine yazmadan oluşturduğunu gösteriyor.
Dosyaları Kopyalama
Tim, (21:35) File.Copy yöntemi kullanarak dosyaların bir dizinden diğerine nasıl kopyalanacağını gösteriyor. Bu, dosyaları yedeklemek veya farklı klasörlere dosya düzenlemek için faydalı olabilir.
string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");
foreach (string file in files)
{
string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
File.Copy(file, destFile, true);
}string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");
foreach (string file in files)
{
string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
File.Copy(file, destFile, true);
}Bu örnekte, dosyalar kök dizinden subfolderA'a kopyalanır ve var olan dosyalar true parametresi sayesinde üzerine yazılır.
Kopyalama Sırasında Dosyaları Yeniden Adlandırma
Tim ayrıca bir for döngüsü ve bir indeks kullanarak kopyalama işlemi sırasında dosyaları nasıl yeniden adlandıracağınızı gösteriyor.
for (int i = 0; i < files.Length; i++)
{
string destFile = Path.Combine(destinationFolder, $"{i}.txt");
File.Copy(files[i], destFile, true);
}for (int i = 0; i < files.Length; i++)
{
string destFile = Path.Combine(destinationFolder, $"{i}.txt");
File.Copy(files[i], destFile, true);
}Bu kod, dosyaları hedef dizine kopyalar ve isimlerini sırasıyla 0.txt, 1.txt vb. olarak yeniden adlandırır.
Dosya Üzerine Yazmayı Yönetme
Tim, mevcut dosyaları üzerine yazmadan nasıl yönetileceğini ve istisnalardan nasıl kaçınılacağını false parametresini ayarlayarak açıklıyor. Bu, var olan dosyaların üzerine yazılmasını önler ve bir dosya zaten varsa bir istisna atar.
try
{
File.Copy(sourceFile, destFile, false);
}
catch (IOException ex)
{
Console.WriteLine($"File already exists: {ex.Message}");
}try
{
File.Copy(sourceFile, destFile, false);
}
catch (IOException ex)
{
Console.WriteLine($"File already exists: {ex.Message}");
}Bu yaklaşım dosya kopyalarını güvenli bir şekilde yönetmeye ve dosyaların üzerine yazılmaması gerektiği durumlardan kaçınmaya yardımcı olur.
Dosya Taşıma
Tim, (28:28) File.Move yöntemi kullanarak dosyaların nasıl taşınacağını gösteriyor. File.Copy'den farklı olarak, File.Move yöntemi bir üzerine yazma seçeneğine sahip değildir ve hedef dosya zaten mevcutsa bir istisna atar.
string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");
foreach (string file in files)
{
string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
File.Move(file, destFile);
}string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");
foreach (string file in files)
{
string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
File.Move(file, destFile);
}Bu kod, dosyaları kök dizinden subfolderA'a taşır ve kaynak dizinden kaldırır.
Yardımcı Uygulamalar Oluşturma
Tim, geliştiricileri C#'ı dosya sistemi görevlerini otomatikleştirmek ve yardımcı uygulamalar oluşturmak için çeşitli yollar düşünmeye teşvik eder. Basit görevlerle başlamayı ve giderek daha karmaşık otomasyon çözümleri geliştirmeyi önerir.
Yardımcı uygulama örnekleri:
Geçici Dosyaları Temizleme: Geçici dosyaları silme sürecini otomatikleştirerek boş alan yaratın.
Harici Sürücülere Yedekleme: Önemli dosyaları harici bir sürücüye kopyalayan bir yedekleme aracı oluşturun.
- Proje Klasörü Eşitleme: Bilgisayar ve genişletilmiş sürücü arasında proje klasörlerini senkronize edin, böylece en son değişikliklerin her zaman yedeklenip geri yüklendiğinden emin olun.
Sonuç
Tim Corey'nin C#'taki dosya sistemi işlemlerinin keşfi, dosya görevlerinin otomasyonunu ve dizin yönetimini içerecek pratik içgörüler sunar. Örneklerini takip ederek, geliştiriciler rutin dosya yönetim görevlerini verimli bir şekilde otomatikleştirebilir ve özel yardımcı uygulamalar oluşturabilir.
Bu kavramların derinlemesine anlaşılması ve eylemde görülmesi için Tim Corey'nin videosunun tamamını izlemenizi şiddetle tavsiye ederim. Ayrıntılı buraya yürüyüşler ve pratik örnekler, anlamanızı pekiştirmenize ve kendi dosya yönetimi uygulamalarınızı geliştirmenize yardımcı olacaktır.

