FileSystemWatcher Sınıf

Tanım

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
FileSystemWatcher
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.

Şunlara uygulanır

Ayrıca bkz.