System.IO.FileSystemWatcher sınıfı
Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.
Belirtilen dizindeki değişiklikleri izlemek için kullanın FileSystemWatcher . Belirtilen dizinin dosya ve alt dizinlerindeki değişiklikleri izleyebilirsiniz. Yerel bir bilgisayardaki, ağ sürücüsündeki veya uzak bilgisayardaki dosyaları izlemek için bir bileşen oluşturabilirsiniz.
Tüm dosyalardaki değişiklikleri izlemek için özelliğini boş bir dize ("") olarak ayarlayın Filter veya joker karakterler ("*.*") kullanın. Belirli bir dosyayı izlemek için özelliğini dosya adına ayarlayın Filter . Örneğin, dosya MyDoc.txt değişiklikleri izlemek için özelliğini "MyDoc.txt" olarak ayarlayın Filter . Ayrıca, belirli bir dosya türündeki değişiklikleri de izleyebilirsiniz. Örneğin, metin dosyalarındaki değişiklikleri izlemek için özelliğini "*.txt" olarak ayarlayın Filter .
Dizinde veya dosyada izleyebileceğiniz çeşitli değişiklik türleri vardır. Örneğin, içindeki değişiklikleriAttributes
LastWrite
, tarih ve saati ya da dosya ya da Size
dizinlerin değişikliklerini izleyebilirsiniz. Bu, özelliği değerlerden birine NotifyFilters ayarlanarak NotifyFilter yapılır. İzleyebileceğiniz değişikliklerin türü hakkında daha fazla bilgi için bkz NotifyFilters. .
Dosya veya dizinlerin yeniden adlandırılmasını, silinmesini veya oluşturulmasını izleyebilirsiniz. Örneğin, metin dosyalarının yeniden adlandırılmasını izlemek için özelliğini "*.txt" olarak ayarlayın Filter ve parametresi için belirtilen yöntemi Renamed çağırınWaitForChanged.
Windows işletim sistemi, dosya değişiklikleri bileşeninizi tarafından oluşturulan bir arabellekte bildirir FileSystemWatcher. Kısa sürede çok sayıda değişiklik olursa arabellek taşabilir. Bu, bileşenin dizindeki değişiklikleri izlemesine neden olur ve yalnızca paket bildirimi sağlar. Diske değiştirilemeyen disk belleği olmayan bellekten geldiğinden, özelliğiyle InternalBufferSize arabelleğin boyutunu artırmak pahalıdır, bu nedenle arabellegi hiçbir dosya değişikliği olayını kaçırmamak için yeterince küçük ama büyük tutun. Arabellek taşmasını önlemek için ve IncludeSubdirectories özelliklerini kullanarak NotifyFilter istenmeyen değişiklik bildirimlerini filtreleyebilirsiniz.
örneğinin ilk özellik değerlerinin FileSystemWatcherlistesi için oluşturucuya FileSystemWatcher bakın.
sınıfını FileSystemWatcher kullanırken dikkat edilmesi gerekenler:
- Gizli dosyalar yoksayılmaz.
- Bazı sistemlerde raporlar, FileSystemWatcher kısa 8.3 dosya adı biçimini kullanarak dosyalarda değişir. Örneğin, "LongFileName.LongExtension" için bir değişiklik "LongFil~ olarak bildirilebilir. Lon".
- Bu sınıf, bir bağlantı talebi ve tüm üyeler için geçerli olan sınıf düzeyinde devralma talebi içerir. Hemen SecurityException çağıranın veya türetilen sınıfın tam güven izni olmadığında bir oluşturulur. Güvenlik talepleri hakkında ayrıntılı bilgi için bkz . Bağlantı Talepleri.
- Ağ üzerinden bir dizini izlemek için özelliği için InternalBufferSize ayarlayabileceğiniz boyut üst sınırı 64 KB'tır.
Klasörleri kopyalama ve taşıma
İşletim sistemi ve FileSystemWatcher nesnesi, kes ve yapıştır eylemini veya taşıma eylemini bir klasör ve içeriği için yeniden adlandırma eylemi olarak yorumlar. İzlenen bir klasöre dosya içeren bir klasörü kesip yapıştırırsanız, FileSystemWatcher nesne yalnızca klasörü yeni olarak bildirir, ancak yalnızca yeniden adlandırıldıkları için içeriğini raporlamaz.
Klasörlerin içeriğinin izlenen bir klasöre taşındığı veya kopyalandığı konusunda bildirim almak için, aşağıdaki tabloda önerilen ve OnRenamed olay işleyicisi yöntemlerini sağlayınOnChanged.
Olay İşleyici | İşlenen Olaylar | Gerçekleştirir |
---|---|---|
OnChanged | Changed, Created, Deleted | Dosya özniteliklerindeki, oluşturulan dosyalardaki ve silinen dosyalardaki değişiklikleri rapor edin. |
OnRenamed | Renamed | Yeniden adlandırılan dosya ve klasörlerin eski ve yeni yollarını listeleyerek gerekirse özyinelemeli olarak genişletin. |
Olaylar ve arabellek boyutları
Aşağıda açıklandığı gibi, hangi dosya sistemi değişiklik olaylarının tetiklendiğini çeşitli faktörlerin etkileyebileceğini unutmayın:
- Yaygın dosya sistemi işlemleri birden fazla olay tetikler. Örneğin, bir dosya bir dizinden diğerine taşındığında, birkaç OnChanged ve bazı OnCreated ve OnDeleted olaylar tetiklenebilir. Bir dosyayı taşımak, birden çok basit işlemden oluşan ve bu nedenle birden çok olay oluşturan karmaşık bir işlemdir. Benzer şekilde, bazı uygulamalar (örneğin, virüsten koruma yazılımı) tarafından FileSystemWatcheralgılanan ek dosya sistemi olaylarına neden olabilir.
- FileSystemWatcher, değiştirilmediği veya kaldırılmadıkları sürece diskleri izleyebilir. FileSystemWatcher, zaman damgaları ve özellikler değişemediğinden CD'ler ve DVD'ler için olayları tetiklemez. Bileşenin düzgün çalışması için uzak bilgisayarlarda gerekli platformlardan birinin yüklü olması gerekir.
Arabellek boyutu aşıldığında bir FileSystemWatcher olayı kaçırabileceğini unutmayın. Eksik olayları önlemek için şu yönergeleri izleyin:
- özelliğini ayarlayarak InternalBufferSize arabellek boyutunu artırın.
- Uzun dosya adları olan dosyaları izlemekten kaçının, çünkü uzun bir dosya adı arabelleği doldurmaya katkıda bulunur. Bu dosyaları daha kısa adlarla yeniden adlandırmayı göz önünde bulundurun.
- Olay işleme kodunuzu olabildiğince kısa tutun.