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

ConstuctorAçıklama
System_CAPS_pubmethodFileSystemWatcher()

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

System_CAPS_pubmethodFileSystemWatcher(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_pubmethodFileSystemWatcher(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

ÖzellikAçıklama
System_CAPS_pubpropertyEnableRaisingEvents

İ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_pubpropertyFilter

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

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

System_CAPS_pubpropertyNotifyFilter

İ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_pubpropertyPath

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

 Olaylar – Events

OlayAçıklama
System_CAPS_pubeventChanged

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

System_CAPS_pubeventCreated

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

System_CAPS_pubeventDeleted

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

System_CAPS_pubeventDisposed

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

System_CAPS_pubeventError

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

System_CAPS_pubeventRenamed

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

Bunlar da hoşunuza gidebilir...

Bir Cevap Yazın