|
FileSystemWatcher ile Dosya Sistemini Gözetleme |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bazen yazdığımız
programlarda programımızın bulunduğu dosyanın içinde bulunan dosyaların durumlarını
gözetlemek isteyebiliriz. Örnek : dosya ismi değiştirildi mi,silindi mi,yaratıldı
mı yada başka bir yere taşındı mi gibi durumlar. Microsoft böyle bir durumun
olacağını düşünerek Framework içinde FileSystemWatcher sınıfını yaratmıştır.
FileSystemWatcher sınıfı System.IO.FileSystemWatcher isim uzayı içinde bulunur.
Bu yazıda FileSystemWatcher sınıfının olaylarını(event) ve özelliklerini
birlikte inceleyeceğiz.
Aşadaki tabloda
FileSystemWatcher sınıfının bazı önemli olayları ve EventHandler’ları sıralanmıştır.
Genel->
EventHandler |
FileSystemEventHandler(_event); |
isim
değişikliği ->EventHandleri |
RenamedEventHandler(_event); |
Genel
->EventArgs |
FileSystemEventArgs |
isim
değişikliği-> EventArgs |
RenamedEventArgs |
Görüldüğü gibi
bir tek isim değişikliğinin EventArgs ve EventHandleri farklı.Bunun sebebi
tamamen sınıfı tasarlayanlanla ilgili ve isim değiştirme özelliğinin diğer özelliklerden
biraz farklı çalışması. FileSystemWatcher sınıfının olaylarını incelersek;
FileSystemWatcher
dosyaizleyici=new FileSystemWatcher(@"C:\dosya"); |
Yeni
dosya yaratma eventi |
dosyaizleyici.Created+=new
FileSystemEventHandler(yaratildi); |
Dosya
silme eventi |
dosyaizleyici.Deleted+=new
FileSystemEventHandler(silindi); |
Dosya
değiştirme eventi |
dosyaizleyici.Changed+=new
FileSystemEventHandler(degisti); |
Dosyanın
ismini değiştirme |
dosyaizleyici.Renamed+=new
RenamedEventHandler(isimdegisti); |
Örnek uygulamamızdaki
FileSystemWatcher nesnesinin Created olayını inceleyelim :
private static
void yaratildi(object gelen,FileSystemEventArgs e)
{
Console.WriteLine("{0} dizininde yeni
dosya oluşturuldu",e.Name);
}
//e.Name özelliği o anda kontrol edilen dizini geriye dönen bir özelliktir.
|
EventArgs’ı farklı
olan Renamed eventi ise (yani isimdegisti fonksiyonu)
private static
void isimdegisti(object gelen,RenamedEventArgs e)
{
Console.WriteLine("{0} dizininde
dosyanın ismi değistirlidi",e.Name);
}
|
FileSystemWatcher
sınıfının bu eventlerinin başlaması için bir bayrak(flag) vardır ve bu özelliğin
true
yapılması
bu eventleri aktif hale getirir.Program bitirilmediği sürece bu sınıftan türemiş nesnenin
tüm eventleri çalışır. Eventleri çalıştırmak için;
dosyaizleyici.EnableRaisingEvents=true;//bu
özellik true olunca eventler tetiklenmeye başlar. |
Örnek programımızın
kodları aşağıdadır. Bu örnekte önemli olan nokta FileSystemWatcher sınıfının
olaylarıdır.
//FileSystemWatcher.cs
yazan:Caner ŞAHAN
using System;
using System.IO;
public class izle
{
private static void yaratildi(object gelen,FileSystemEventArgs
e)
{
Console.WriteLine("{0}
dizininde yeni dosya olusturuldu",e.Name);
Console.WriteLine("*******************************************");
}
private static void degisti(object gelen,FileSystemEventArgs
e)
{
Console.WriteLine("{0}
dizinindeki dosya degisti",e.Name);
Console.WriteLine("*******************************************");
}
private static void isimdegisti(object gelen,RenamedEventArgs
e)
{
Console.WriteLine("{0}
dizinindeki dosyanın ismi degisti",e.Name);
Console.WriteLine("*******************************************");
}
private static void silindi(object gelen,FileSystemEventArgs
e)
{
Console.WriteLine("{0}
dizinindeki dosya silindi",e.Name);
Console.WriteLine("*******************************************");
}
private static void tetikleme(object gelen,FileSystemEventArgs
e)
{
Console.WriteLine("{0} dizininde
birseyler oluyor",e.Name);
}
public static void Main(string[]args)
{
string path=args[0];
try
{
FileSystemWatcher
dosyaizleyici=new FileSystemWatcher(path);
dosyaizleyici.Filter="*";
//
FileSystemEventHandler
tetikle=new FileSystemEventHandler(tetikleme);
dosyaizleyici.Changed+=tetikle;
dosyaizleyici.Deleted+=tetikle;
dosyaizleyici.Created+=tetikle;
//
dosyaizleyici.Created+=new
FileSystemEventHandler(yaratildi);
dosyaizleyici.Changed+=new
FileSystemEventHandler(degisti);
dosyaizleyici.Renamed+=new
RenamedEventHandler(isimdegisti);
dosyaizleyici.Deleted+=new
FileSystemEventHandler(silindi);
//
dosyaizleyici.EnableRaisingEvents=true;
Console.WriteLine("----------------Dosya
izleme basladi----------------");
Console.WriteLine("Dosya
izlemeye alIndI!SonlandIrmak icin herhangibir tusa basInIz!!");
Console.WriteLine();
Console.ReadLine();
Console.WriteLine("---------------Dosya
izleme sona erdi---------------");
}
catch
{
Console.WriteLine("Yol
adını giriniz.örnek,C:\\dosya");
}
}
}
|
Programı mono’da
derledim yani mcs’i kullandım. Ama aynı kodları csc ilede derlesek te yine çalışacaktır.
Çünkü System isim uzaylarını kullandığımız için bir sorun çıkmayacaktır.
C:\izlenendosya
dizinindeki izlenendosya klasörünün içine bir yeni dosya açarak tetikleme
ve yaratildi eventleri yakalandı.Console uygulamalarında kodla yaptığımız
bütün bu işleri Visual Studio ile de aşadaki şekilde ayarlayabiliriz.
.NET ile
ilgili bir konuyu daha aydınlatmış olduk.Hepinize iyi çalışmalar.
Kaynak
kod ve örnek uygulama için
Makale:
FileSystemWatcher ile Dosya Sistemini Gözetleme C#, Visual C# ve .NET Caner Şahan
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|