C# Dosya Takip Etme

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda C# ile bilgisayarda bulunan bir klasörü takip edecek ve bu klasör içerisindeki dosya yada klasörlerdeki silme, yeniden adlandırma, dosya/klasör oluşturma gibi işlemleri takip etmeyi anlatacağım. Hadi başlayalım !
Table of Contents
Ön Hazırlık
Yapacağımız işlemler dosya sistemi ile alakalı olduğu için bu işlemleri yapabilmemizi sağlayan System.IO kütüphanesini öncelikle kod yazacağımız sayfada çağırmamız gerekiyor. Bunun için dosyanın en başına gelerek
using System.IO;
kod satırını ekleyelim. Ardından tam bir dosya takipçisi yapabileceğiz.
FileSystemWatcher Sınıfı
Klasör takibini yapabilmek için FileSystemWatcher adındaki sınıfı kullanacağız ve elbette bu sınıfı kullanabilmek için yeni bir nesnesini türetmemiz gerekiyor. Bu sınıfın yeni bir nesnesi constructor metodu kullanılarak yapılabiliyor ve constructor metoda string tipte takip edeceğimiz klasörün yolunu parametre olarak göndermemiz gerekiyor. Yazının en başından beri klasör takip etme diyorum çünkü dosyalarda bu işlem yapılamamakta, klasörlerde yapılmakta. Siz özel olarak bir dosyayı takip etmek istiyorsanız o dosyanın bulunduğu klasörün yolunu constructor metoda parametre olarak gönderebilirsiniz. Örneğin biz masaüstünü takip edelim.
FileSystemWatcher watcher = new FileSystemWatcher("c:/users/kullanici/desktop");
Alt Klasörleri de Takip Etme
Yeni bir FileSystemWatcher nesnesi oluşturduk ve parametre olarak masaüstünün yolunu vererek masaüstünde yapılacak olan dosya hareketlerini bize raporla dedik. Bu haliyle kullanımımızda sadece masaüstünde olan hareketleri takip edebiliriz. Örneğin masaüstünde bulunan bir klasör içerisindeki hareketleri göremeyiz. Alt klasörleri de takip etmek istiyorsak watcher nesnesi altındaki IncludeSubdirectories propertysini true olarak atamamız gerekiyor. Bu property false ise alt klasörlerde olan hareketleri takip etmez, true ise takip eder ve ön tanımlı olarak false değerindedir.
watcher.IncludeSubdirectories = true;
Dosya Yeniden Adlandırmaları Takip Etme
FileSystemWatcher sınıfı ile silme, yeniden adlandırma, oluşturma işlemlerini takip edebiliyoruz ve bu takipleri watcher nesnesinin olay yönlendiricilerini kullanarak yapıyoruz. Silme işleminde Deleted, oluşturma işleminde Created, yeniden adlandırma işleminde Renamed olay yönlendiricileri tetiklenmekte ve bu olay yönlendiricileri ile takipler yapılmakta. Tetikleyicileri kullanabilmek için ise oluşturmamız gerekiyor. C#’ta bir olay yönlendiricisi nesne.tetikleyici += fonksiyon şeklinde oluşturulabilmekte. Örneğin Renamed eventini oluşturalım.
watcher.Renamed += yenidenAdlandirma;
Bu şekilde bir olay yönlendiricisi oluşturduktan sonra eşitliğin sağ tarafına yazdığımız isimdeki fonksiyonu oluşturup olay yönlendiricisi içerisinde yapmak istediğimiz işlemleri yapabiliriz. Renamed olay yönlendiricisi tipik olay yönlendiricileri gibi oluşturulmakta ve EventArgs olarak RenamedEventArgs verilmelidir ve bu nesne altında adı değiştirilen dosyanın yeni adı, eski adı, yeni yolu ve eski yoluna erişilebilmektedir. Örneğin bir dosyanın adı değiştirildiğinde şu şekilde bir yazdırma işlemi yapalım;
void yenidenAdlandirma(object sender, RenamedEventArgs e)
{
Console.WriteLine(e.OldFullPath + " Dosyasının Adı " + e.FullPath + " Olarak Değiştirildi");
}
Dosya Oluşturma ve Silmeleri Takip Etme
Oluşturma ve silme eventlerinde ise EventArgs olarak FileSystemEventArgs gönderilmelidir. Bu nesne ile oluşturulan yada silinen dosyanın adı ve yoluna erişebilmekteyiz. Örneğin oluşturma ve silme işlemi için de olay yönlendiricileri oluşturalım ve yeniden adlandırmaya benzer şekilde ekranda yazdıralım.
watcher.Created += olusturma;
watcher.Deleted += silme;
void olusturma(object sender, FileSystemEventArgs e)
{
Console.WriteLine(e.FullPath + " Oluşturuldu");
}
void silme(object sender, FileSystemEventArgs e)
{
Console.WriteLine(e.FullPath + " Dosyası Silindi");
}
Tüm Kodlar
Ben sadece console ekranına yazdırdım fakat siz Excel veya metin belgesi gibi bir dosyaya yazdırma, API’ye istek atma, veritabanına yazma gibi istediğiniz işlemi yapabilirsiniz. Evet FileSystemWatcher sınıfı ile bir klasörü takip etme bu şekilde yapılmakta. Yazdığımız tüm kodları aşağıya bırakıyorum;
void Main()
{
FileSystemWatcher watcher = new FileSystemWatcher("c:/users/kullanici/desktop");
watcher.IncludeSubdirectories = true;
watcher.Renamed += yenidenAdlandirma;
watcher.Created += olusturma;
watcher.Deleted += silme;
}
void yenidenAdlandirma(object sender, RenamedEventArgs e)
{
Console.WriteLine(e.OldFullPath + " Dosyasının Adı " + e.FullPath + " Olarak Değiştirildi");
}
void olusturma(object sender, FileSystemEventArgs e)
{
Console.WriteLine(e.FullPath + " Oluşturuldu");
}
void silme(object sender, FileSystemEventArgs e)
{
Console.WriteLine(e.FullPath + " Dosyası Silindi");
}
Tüm C# yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.