FileSystemWatcher Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Dosya sistemi değişiklik bildirimlerini dinler ve dizindeki veya dizindeki bir dosya değiştiğinde olayları tetikler.
public ref class FileSystemWatcher : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public ref class FileSystemWatcher : IDisposable
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
public class FileSystemWatcher : IDisposable
[System.IO.IODescription("FileSystemWatcherDesc")]
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
type FileSystemWatcher = class
inherit Component
interface ISupportInitialize
type FileSystemWatcher = class
interface IDisposable
[<System.IO.IODescription("FileSystemWatcherDesc")>]
type FileSystemWatcher = class
inherit Component
interface ISupportInitialize
Public Class FileSystemWatcher
Inherits Component
Implements ISupportInitialize
Public Class FileSystemWatcher
Implements IDisposable
- Devralma
- Devralma
-
FileSystemWatcher
- Öznitelikler
- Uygulamalar
Örnekler
Aşağıdaki örnek, çalışma zamanında belirtilen dizini izlemek için bir FileSystemWatcher oluşturur. Bileşen, ve zamanındaki değişiklikleri, dizindeki LastWriteLastAccess metin dosyalarının oluşturulmasını, silinmesini veya yeniden adlandırılmasını izleyecek şekilde ayarlanır. Bir dosya değiştirilir, oluşturulur veya silinirse, dosyanın yolu konsola yazdırılır. Bir dosya yeniden adlandırıldığında, eski ve yeni yollar konsola yazdırılır.
using System;
using System.IO;
namespace MyNamespace
{
class MyClassCS
{
static void Main()
{
using var watcher = new FileSystemWatcher(@"C:\path\to\folder");
watcher.NotifyFilter = NotifyFilters.Attributes
| NotifyFilters.CreationTime
| NotifyFilters.DirectoryName
| NotifyFilters.FileName
| NotifyFilters.LastAccess
| NotifyFilters.LastWrite
| NotifyFilters.Security
| NotifyFilters.Size;
watcher.Changed += OnChanged;
watcher.Created += OnCreated;
watcher.Deleted += OnDeleted;
watcher.Renamed += OnRenamed;
watcher.Error += OnError;
watcher.Filter = "*.txt";
watcher.IncludeSubdirectories = true;
watcher.EnableRaisingEvents = true;
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
}
private static void OnChanged(object sender, FileSystemEventArgs e)
{
if (e.ChangeType != WatcherChangeTypes.Changed)
{
return;
}
Console.WriteLine($"Changed: {e.FullPath}");
}
private static void OnCreated(object sender, FileSystemEventArgs e)
{
string value = $"Created: {e.FullPath}";
Console.WriteLine(value);
}
private static void OnDeleted(object sender, FileSystemEventArgs e) =>
Console.WriteLine($"Deleted: {e.FullPath}");
private static void OnRenamed(object sender, RenamedEventArgs e)
{
Console.WriteLine($"Renamed:");
Console.WriteLine($" Old: {e.OldFullPath}");
Console.WriteLine($" New: {e.FullPath}");
}
private static void OnError(object sender, ErrorEventArgs e) =>
PrintException(e.GetException());
private static void PrintException(Exception? ex)
{
if (ex != null)
{
Console.WriteLine($"Message: {ex.Message}");
Console.WriteLine("Stacktrace:");
Console.WriteLine(ex.StackTrace);
Console.WriteLine();
PrintException(ex.InnerException);
}
}
}
}
Imports System.IO
Namespace MyNamespace
Class MyClassVB
Shared Sub Main()
Using watcher = New FileSystemWatcher("C:\path\to\folder")
watcher.NotifyFilter = NotifyFilters.Attributes Or
NotifyFilters.CreationTime Or
NotifyFilters.DirectoryName Or
NotifyFilters.FileName Or
NotifyFilters.LastAccess Or
NotifyFilters.LastWrite Or
NotifyFilters.Security Or
NotifyFilters.Size
AddHandler watcher.Changed, AddressOf OnChanged
AddHandler watcher.Created, AddressOf OnCreated
AddHandler watcher.Deleted, AddressOf OnDeleted
AddHandler watcher.Renamed, AddressOf OnRenamed
AddHandler watcher.Error, AddressOf OnError
watcher.Filter = "*.txt"
watcher.IncludeSubdirectories = True
watcher.EnableRaisingEvents = True
Console.WriteLine("Press enter to exit.")
Console.ReadLine()
End Using
End Sub
Private Shared Sub OnChanged(sender As Object, e As FileSystemEventArgs)
If e.ChangeType <> WatcherChangeTypes.Changed Then
Return
End If
Console.WriteLine($"Changed: {e.FullPath}")
End Sub
Private Shared Sub OnCreated(sender As Object, e As FileSystemEventArgs)
Dim value As String = $"Created: {e.FullPath}"
Console.WriteLine(value)
End Sub
Private Shared Sub OnDeleted(sender As Object, e As FileSystemEventArgs)
Console.WriteLine($"Deleted: {e.FullPath}")
End Sub
Private Shared Sub OnRenamed(sender As Object, e As RenamedEventArgs)
Console.WriteLine($"Renamed:")
Console.WriteLine($" Old: {e.OldFullPath}")
Console.WriteLine($" New: {e.FullPath}")
End Sub
Private Shared Sub OnError(sender As Object, e As ErrorEventArgs)
PrintException(e.GetException())
End Sub
Private Shared Sub PrintException(ex As Exception)
If ex IsNot Nothing Then
Console.WriteLine($"Message: {ex.Message}")
Console.WriteLine("Stacktrace:")
Console.WriteLine(ex.StackTrace)
Console.WriteLine()
PrintException(ex.InnerException)
End If
End Sub
End Class
End Namespace
Açıklamalar
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 (Filter) olarak ayarlayın "" veya joker karakterler ("*.*" kullanın). Belirli bir dosyayı izlemek için Filter özelliğini dosya adı olarak ayarlayın. Örneğin, MyDoc.txtdosyasındaki değişiklikleri izlemek için özelliğini olarak Filterayarlayın"MyDoc.txt". 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 olarak Filterayarlayın"*.txt".
Dizinde veya dosyada izleyebileceğiniz çeşitli değişiklik türleri vardır. Örneğin, Attributes içindeki değişiklikleri, LastWrite tarihi ve saati ya da dosya veya dizinlerin Size değişikliklerini izleyebilirsiniz. Bu, NotifyFilter özelliğinin NotifyFilters değerlerinden birine ayarlanmasıyla 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 Filter özelliğini "*.txt" olarak ayarlayın ve parametresi için belirtilen WaitForChanged yöntemini çağırın Renamed.
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 takip edememesine neden olur ve yalnızca genel bir bildirim sağlar. Disk belleğine aktarılmayan bellekten geldiğinden, InternalBufferSize özelliği ile arabelleğin boyutunu artırmak pahalıdır, bu nedenle arabelleği hiçbir dosya değişikliği olayını kaçırmayacak şekilde yeterince büyük ancak küçük tutun. Arabellek taşmasını önlemek için NotifyFilter ve IncludeSubdirectories özelliklerini kullanarak istenmeyen değişiklik bildirimlerini filtreleyebilirsiniz.
Bir FileSystemWatcher örneğinin ilk özellik değerlerinin listesini görmek için FileSystemWatcher oluşturucusuna bakın.
sınıfını kullanırken aşağıdaki olguları FileSystemWatcher göz önünde bulundurun:
- Gizli dosyalar yoksayılamaz.
- Bazı sistemlerde, FileSystemWatcher dosyalardaki değişiklikleri 8.3 kısa dosya adı formatını kullanarak raporlar. Örneğin, "LongFileName.LongExtension" için bir değişiklik "LongFil~.Lon" olarak bildirilebilir.
- 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.
İzlenen bir klasöre klasörlerin içeriği taşındığında veya kopyalandığında bildirim almak için, aşağıdaki tabloda önerildiği gibi OnChanged ve OnRenamed olay işleyicisi yöntemlerini sağlayın.
| Olay İşleyicisi | İş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ı) FileSystemWatcher tarafından algı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:
- InternalBufferSize özelliğini ayarlayarak 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.
Oluşturucular
| Name | Description |
|---|---|
| FileSystemWatcher() |
FileSystemWatcher sınıfının yeni bir örneğini başlatır. |
| FileSystemWatcher(String, String) |
Belirtilen dizin ve izlenecek dosyaların türü göz önüne alındığında sınıfının yeni bir örneğini FileSystemWatcher başlatır. |
| FileSystemWatcher(String) |
İzlenecek belirtilen dizin verilip sınıfın FileSystemWatcher yeni bir örneğini başlatır. |
Özellikler
| Name | Description |
|---|---|
| CanRaiseEvents |
Bileşenin olay oluşturup oluşturamayacağını belirten bir değer alır. (Devralındığı yer: Component) |
| Container |
öğesini IContainer içeren öğesini Componentalır. (Devralındığı yer: Component) |
| DesignMode |
öğesinin şu anda tasarım modunda olup olmadığını Component gösteren bir değer alır. (Devralındığı yer: Component) |
| EnableRaisingEvents |
Bileşenin etkinleştirilip etkinleştirilmediğini belirten bir değer alır veya ayarlar. |
| Events |
Bu Componentöğesine eklenen olay işleyicilerinin listesini alır. (Devralındığı yer: Component) |
| Filter |
Dizinde hangi dosyaların izleneceğini belirlemek için kullanılan filtre dizesini alır veya ayarlar. |
| Filters |
Dizinde hangi dosyaların izleneceğini belirlemek için kullanılan tüm filtrelerin koleksiyonunu alır. |
| IncludeSubdirectories |
Belirtilen yol içindeki alt dizinlerin izlenmesi gerekip gerekmediğini belirten bir değer alır veya ayarlar. |
| InternalBufferSize |
İç arabelleğin boyutunu (bayt cinsinden) alır veya ayarlar. |
| NotifyFilter |
İzleneceğiniz değişikliklerin türünü alır veya ayarlar. |
| Path |
İzleyebileceğiniz dizinin yolunu alır veya ayarlar. |
| Site |
için ISitebir FileSystemWatcher alır veya ayarlar. |
| SynchronizingObject |
Dizin değişikliği sonucunda verilen olay işleyici çağrılarını sıralamak için kullanılan nesneyi alır veya ayarlar. |
Yöntemler
| Name | Description |
|---|---|
| BeginInit() |
Formda kullanılan veya başka bir FileSystemWatcher bileşen tarafından kullanılan bir öğesinin başlatılmasını başlatır. Başlatma çalışma zamanında gerçekleşir. |
| CreateObjRef(Type) |
Uzak bir nesneyle iletişim kurmak için kullanılan bir ara sunucu oluşturmak için gereken tüm ilgili bilgileri içeren bir nesne oluşturur. (Devralındığı yer: MarshalByRefObject) |
| Dispose() |
tarafından FileSystemWatcherkullanılan yönetilmeyen kaynakları serbest bırakır. |
| Dispose() |
tarafından Componentkullanılan tüm kaynakları serbest bırakır. (Devralındığı yer: Component) |
| Dispose(Boolean) |
tarafından FileSystemWatcher kullanılan yönetilmeyen kaynakları serbest bırakır ve isteğe bağlı olarak yönetilen kaynakları serbest bırakır. |
| EndInit() |
Formda kullanılan veya başka bir bileşen tarafından kullanılan bir FileSystemWatcher öğesinin başlatılmasını sonlandırır. Başlatma çalışma zamanında gerçekleşir. |
| Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
| GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
| GetLifetimeService() |
Geçersiz.
Bu örnek için yaşam süresi ilkesini denetleen geçerli yaşam süresi hizmet nesnesini alır. (Devralındığı yer: MarshalByRefObject) |
| GetService(Type) |
veya Componenttarafından Container sağlanan bir hizmeti temsil eden bir nesnesi döndürür. (Devralındığı yer: Component) |
| GetType() |
Geçerli örneğin Type alır. (Devralındığı yer: Object) |
| InitializeLifetimeService() |
Geçersiz.
Bu örneğin yaşam süresi ilkesini denetlemek için bir yaşam süresi hizmet nesnesi alır. (Devralındığı yer: MarshalByRefObject) |
| MemberwiseClone() |
Geçerli Objectbasit bir kopyasını oluşturur. (Devralındığı yer: Object) |
| MemberwiseClone(Boolean) |
Geçerli MarshalByRefObject nesnenin sığ bir kopyasını oluşturur. (Devralındığı yer: MarshalByRefObject) |
| OnChanged(FileSystemEventArgs) |
Olayı tetikler Changed . |
| OnCreated(FileSystemEventArgs) |
Olayı tetikler Created . |
| OnDeleted(FileSystemEventArgs) |
Olayı tetikler Deleted . |
| OnError(ErrorEventArgs) |
Olayı tetikler Error . |
| OnRenamed(RenamedEventArgs) |
Olayı tetikler Renamed . |
| ToString() |
Varsa, adını Stringiçeren bir Component döndürür. Bu yöntem geçersiz kılınmamalıdır. (Devralındığı yer: Component) |
| ToString() |
Geçerli nesneyi temsil eden bir dize döndürür. (Devralındığı yer: Object) |
| WaitForChanged(WatcherChangeTypes, Int32) |
İzlemek istediğiniz değişiklik türü ve zaman aşımına uğramadan önce beklenecek süre (milisaniye) dikkate alındığında, gerçekleşen değişiklikle ilgili belirli bilgileri içeren bir yapı döndüren zaman uyumlu bir yöntem. |
| WaitForChanged(WatcherChangeTypes, TimeSpan) |
İzlenecek değişikliğin türü göz önüne alındığında, gerçekleşen değişiklikle ilgili belirli bilgileri içeren bir yapıyı zaman uyumlu olarak döndürür. |
| WaitForChanged(WatcherChangeTypes) |
İzlemek istediğiniz değişiklik türüne göre gerçekleşen değişiklikle ilgili belirli bilgileri içeren bir yapı döndüren zaman uyumlu bir yöntem. |
Ekinlikler
| Name | Description |
|---|---|
| Changed |
Belirtilen Path içindeki bir dosya veya dizin değiştirildiğinde gerçekleşir. |
| Created |
Belirtilen Path içindeki bir dosya veya dizin oluşturulduğunda gerçekleşir. |
| Deleted |
Belirtilen Path içindeki bir dosya veya dizin silindiğinde gerçekleşir. |
| Disposed |
Bileşen yöntemine Dispose() yapılan bir çağrıyla atıldığında gerçekleşir. (Devralındığı yer: Component) |
| Error |
örneği FileSystemWatcher değişiklikleri izlemeye devam edemediğinde veya iç arabellek taştığında gerçekleşir. |
| Renamed |
Belirtilen Path içindeki bir dosya veya dizin yeniden adlandırıldığında gerçekleşir. |