FileSystemWatcher ile klasör yada dosyayı izleme

Projenizi geliştirirken bazen bir dizini yada dosyayı izlemeniz gereken durumlar olabiliyor işte bu durumlarda C#’da ihtiyacı karşılamak için FileSystemWatcher sınıfını kullanıyoruz oldukça basit ve anlaşılması kolay olan bu sınıf ve üyelerini(Property, Event, Constructor v.b.) nasıl kullanılacağını örnek kodlarla açıklamaya çalışacağım.

FileSystemWatcher ile klasör yada dosyayı izleme

Bu makalemizde .Net Framework 1.1 ile kullanıma sunulmuş yani neredeyse .Net dünyasının yolunun başlangıcından beri yer alan FileSystemWatcher sınıfını detaylıca örneklerle incelemeye çalışacağız.

Şimdi sırasıyla FileSystemWatcher sınıfının constructor’larını göreceğiz ve parametrelerinin neler olduğunu açıklayacağız, kullanacağımız metodlara gözatacağız ve metodların işlevlerini açıklamasıyla göreceğiz ardından sınıfın property’lerine gözatacağız ve hangi property’nin ne gibi işlevi var bunlara değineceğiz sınıf konusunda net olarak fikir sahibi olduktan sonra güzel açıklamalı örnekler ile makaleyi bitireceğiz son olarak bu makalede ve önceki çoğu makalemdeki örneklere github.com/muratoner adresinden ulaşabilirsiniz bu örneğe ait projeyede makalenin en altındaki github linkinden ulaşabilirsiniz.

FileSystemWatcher ile klasör yada dosyayı izleme

Öncelikle FileSystemWatcher’ın sırasıyla sahip olduğu constructor’lar, property’ler ve event’lere gözatalım.

Yapıcı Metodlar – Constructors

Constuctor Açıklama
System_CAPS_pubmethod FileSystemWatcher()

Default constructor ile FileSystemWatcher sınıfından bir örnek alınabilir diğer parametreler sonradan property’lere verilebilir.

System_CAPS_pubmethod FileSystemWatcher(String) Bu constructor ile belirlediğiniz dizini izleyebilirsiniz notify kısıtlaması yapmadığınız sürece create, delete, change, rename event’leri her dosya için tetiklenecektir.
System_CAPS_pubmethod FileSystemWatcher(String, String) Bir üstteki constructor’a ek olarak ikinci parametreye hangi dosyaları izleyeceğinizi belirtiyorsunuz örnek *.txt ifadesi ile .txt uzantılı tüm dosyalar için üstte belirtilen olayların tetiklenmesini sağlayabilirsiniz.

Özellikler – Properties

Özellik Açıklama
System_CAPS_pubproperty EnableRaisingEvents

İzleme yolunu ayarlayıp diğer konfigurasyonlarınızı yaptıktan sonra bu özelliğe true değerini vererek izleme işlemini başlatabilirsiniz.

System_CAPS_pubproperty Filter

Bir dizindeki hangi tür dosyaların izleneceğini filtreleyebileceğiniz özelliktir.

System_CAPS_pubproperty IncludeSubdirectories İzlemeye alt kategorilerin dahil edilip edilmeyeceğini boolean değer ile belirtebileceğiniz özelliktir.

System_CAPS_pubproperty NotifyFilter

İzleme yapacağınız türleri belirliyorsunuz örnek dosyalar üzerinde izleme sağla, klasörler üzerinden izleme sağla, oluşturma tarihleri üzerinden izleme sağla v.b flag’ler mevcut. Varsayılan olarak şu üç flag atanmıştır NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.LastWrite

System_CAPS_pubproperty Path

İzleme yapacağınız dizinin yolunu belirtiyorsunuz.

 Olaylar – Events

Olay Açıklama
System_CAPS_pubevent Changed

Belirtttiğiniz yoldaki dizin yada dosya değiştiğinde çalışacak olaydır.

System_CAPS_pubevent Created

Belirtttiğiniz yoldaki dizin yada dosya oluştuğunda çalışacak olaydır.

System_CAPS_pubevent Deleted

Belirtttiğiniz yoldaki dizin yada dosya silindiğinde çalışacak olaydır.

System_CAPS_pubevent Disposed

Dispose yöntemine yapılan çağrı sonucunda component yok edildiğinde tetiklenir. (Component sınıfından miras alır.)

System_CAPS_pubevent Error

FileSystemWatcher örneği değişiklikleri izlemeye devam edemediğinde veya dahili arabellek taşması durumunda oluşur.

System_CAPS_pubevent Renamed

Belirtttiğiniz yoldaki dizin yada dosya yeniden adlandırıldığında çalışacak olaydır.

Bütün constructor, event ve property’lere gözattıktan sonra şimdide biraz işleyiş kısmına geçelim FileSystemWatcher sınıfı ile belirli bir klasör altındaki tüm değişiklikleri izleyebilirsiniz ayrıca belirlediğiniz dizin altındaki tüm dosya ve alt klasörlerdeki değişiklikleri izleyebilirsiniz fakat burada dikkat edilmesi gereken bir durum var belirlediğiniz dizin altındaki alt dizinlerde oluşturduğunuz dosyalar ve yeni klasörler için tüm değişikliklerde ilgili dosya için event tetiklenmiyor alt klasörlerde dosya/klasör oluşturma, silme ve düzenlemede sadece alt klasör için değişiklik oldu event’i tetiklenecek.

Eğer belirlediğiniz dizin içerisindeki tüm dosyaları izlemek isterseniz constructor’un filter parametresine yada FileSystemWatcher adlı Filter özelliğine *.* ifadesini tanımlamalısınız. Eğer sadece belirli türdeki dosyaları izlemek isterseniz o zaman örnek olarak *.txt şeklinde bir tanımla sadece .txt uzantılı dosyaları izleyebilirsiniz ama sadece belirli bir dosyada izleme yapmak istiyorsanız DosyaAdi.txt şekilde bir ifade kullanabilirsiniz.

Eğer default constructor yada 1 parametreli constructor’i kullanacaksanız bu constructor’lar filter için default olarak *.* pattern’ini atamaktadır.

Şimdi buraya kadar anlattıklarımızı basit bir örnek üzerinden gidelim.

Üstteki kodu açıklarsak FileSystemWatcher sınıfından bir instance aldık 1 parametreli constructor’ina izleyeceğimiz yolu belirterek ve ardından Changed, Created, Deleted, Error, Renamed event’lerine delegate tanımladık son olarak belirttiğimiz yolun izlenmesi ve dosya oluşturma, silme, değiştirme ayrıca klasör oluşturma silme, alt klasörlerdeki işlemlerde yapılacak değişikliklerin tetiklenebilmesi için EnableRaisingEvents adlı özelliğe true değerini atıyoruz.

Üstteki örneğe ait çıktıya alttaki gif’den gözatabilirsiniz.

FileSystemWatcher ile dikkat etmeniz gereken bir durum var oda gizli dosyaların gözardı edilemiyor oluşudur yani gizli dosyalar üzerinde yapılacak işlemlerde yine ilgili event’ler tetiklenecektir.

Kaynaklar

FileSystemWatcher ile klasör yada dosyayı izleme
5 (100%) 2 oy

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir