Farklı projelerle ilgili önüme çıkan benim için yeni gördüğüm şeyleri paylaşmaya devam ediyorum. Bugün bir dizini ya da dosyayı izleyip çeşitli durmlarda event tetikleyen FileSystemWatcher dan bahsedeceğim. Fazla detaya girmeden kolayca nasıl kullanacağımıza göz atalım.

 

FileSystemWatcher doğal olarak System.IO namespaceinin altında bulunuyor. İki adet event handlera sahip; OnChanged ve OnRenamed. OnChanged event handleri attributlardaki değişmeleri, oluşan dosyaları ve silinen dosyaları yakalar. OnRenamed handleride dosya ve dizinlerdeki isim değişikliklerini yakalar. İlk aşamada bilmemiz gereken şeyler; metodumuz gizli dosyaları dinleyebilir, uzun dosya isimlerini ve uzantıları komut ekranında bazen karşılaştığımız gibi kısa formatta gösterebilir o yüzden dikkat etmemiz gerek ve dizine ulaşma iznimizin olup olmadığı.

 

Metodumuzun en basit şekilde işimize yarayacak şekilde kullanmak için lazım olan özelliklerine göz atalım. Öncelikle ayarlamamız gereken özellik Path  özelliği, burada takip edeceğimiz dizinin yada dosyanın adres bilgisini ayarlıyoruz. Daha sonra eğer özellikle takip ettiğimiz bir uzantı ya da dosya-dizin adı varsa filtre belirleyebiliriz. Bunun için Filtre özelliğiyle anahtar karakterler kullanarak filtremizi tanımlıyoruz.(Örneğin word belgesi için “*.doc” gibi.) Sıra geldi bu metodumuzun amacını belirteceğimiz noktaya burada nelerin bize haber verilmesini istediğimizi tanımlayacağız. Bu tanımlamayı NotifyFilter özelliğimizle tanımlıyoruz. NotifyFilterlar şunlardır :

 

FileName : Dosya adları.

DirectoryName : Dizin adları.

Attributes: Attributelar.

Size: Dosya veya dizinin büyüklüğü.

LastWrite: Dosya yada dizindeki son değişiklik tarihi.

LastAccess : Dosya yada dizinin son açılma tarihi.

CreationTime : Dosya yada dizinin oluşturulma tarihi.

Security : Dosya yada dizinin güvenlik bilgisi.

 

İstediğimiz NotifyFilterları seçip aralarına veya (|) işareti koyarak yan yana yazıyoruz.

Son olarak da eventlarımızı ayarlayıp EnableRaisingEvents özelliğini true olarak set ediyoruz.

 

Bir senaryo üzerinden kodlara göz atıp yazımızı tamamlayalım. Örneğin acces veri tabanı kullanarak bilgiler tutuyorsunuz ver mesela veri tabanı dosyasındaki değişiklikleri takip etmek istiyorsunuz. Global.asax dosyamızı aşağıdaki gibi düzenliyoruz.

 

 

 

protected void Application_Start(object sender, EventArgs e)

        {

            FileSystemWatcher fswTakipci = new FileSystemWatcher();

            fswTakipci.Path = Server.MapPath("/App_Data");

            fswTakipci.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite;

            fswTakipci.Filter = "*.mdb";

 

            fswTakipci.Changed += new FileSystemEventHandler(OnChanged);

            fswTakipci.Created += new FileSystemEventHandler(OnChanged);

            fswTakipci.Deleted += new FileSystemEventHandler(OnChanged);

            fswTakipci.Renamed += new RenamedEventHandler(OnRenamed);

 

            fswTakipci.EnableRaisingEvents = true;

 

        }

 

        private static void OnChanged(object source, FileSystemEventArgs e)

        {

            // e.ChangeType(değişikliğin türü); e.FullPath(dosyanın adresi); e.Name(dosyanın adı);

            // log doyasına yazabilir gereken bir işlemi yapabiliriz.

        }

 

        private static void OnRenamed(object source, RenamedEventArgs e)

        {

            //e.OldFullPath, e.FullPath, e.Name, e.OldName ;

        }

 

Daha detaylı bilgiye MSDN üzerinden ulaşabilirsiniz. İnşallah faydalı olmuştur.

 

Teşekkürler.

Etiketler : Dosya Dizin Takip FileSystemWatcher
Kategoriler : ASP .NET
Yorumlar : 0 Yorum Yorum Yaz

Yorumlar

Yorum Eklenmemiş...

Yorum Yaz

Adınız: *
E-Mail Adresiniz: *
Web Sitesi:
Yorum: *
Güvenlik Kodu: *
 
Takip
Sayfalar
Arama
  Ara
Tag Bulutu