FileSystemWatcher Sınıf

Tanım

Dosya sistemi değişiklik bildirimlerini dinler ve dizindeki bir dizin veya dosya değiştiğinde olayları tetikler.

public ref class FileSystemWatcher : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public ref class FileSystemWatcher : IDisposable
public ref class FileSystemWatcher : System::ComponentModel::Component, IDisposable, System::ComponentModel::ISupportInitialize
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
public class FileSystemWatcher : System.ComponentModel.Component, IDisposable, System.ComponentModel.ISupportInitialize
[System.IO.IODescription("")]
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
type FileSystemWatcher = class
    inherit Component
    interface IDisposable
    interface ISupportInitialize
[<System.IO.IODescription("")>]
type FileSystemWatcher = class
    inherit Component
    interface ISupportInitialize
Public Class FileSystemWatcher
Inherits Component
Implements ISupportInitialize
Public Class FileSystemWatcher
Implements IDisposable
Public Class FileSystemWatcher
Inherits Component
Implements IDisposable, ISupportInitialize
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, dizindeki LastAccess metin dosyalarının oluşturulmasını, silinmesini veya yeniden adlandırılmasını ve zaman içindeki LastWrite değişiklikleri 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.

#include "pch.h"

using namespace System;
using namespace System::IO;

class MyClassCPP
{
public:

    int static Run()
    {
        FileSystemWatcher^ watcher = gcnew FileSystemWatcher("C:\\path\\to\\folder");

        watcher->NotifyFilter = static_cast<NotifyFilters>(NotifyFilters::Attributes
                                                         | NotifyFilters::CreationTime
                                                         | NotifyFilters::DirectoryName
                                                         | NotifyFilters::FileName
                                                         | NotifyFilters::LastAccess
                                                         | NotifyFilters::LastWrite
                                                         | NotifyFilters::Security
                                                         | NotifyFilters::Size);

        watcher->Changed += gcnew FileSystemEventHandler(MyClassCPP::OnChanged);
        watcher->Created += gcnew FileSystemEventHandler(MyClassCPP::OnCreated);
        watcher->Deleted += gcnew FileSystemEventHandler(MyClassCPP::OnDeleted);
        watcher->Renamed += gcnew RenamedEventHandler(MyClassCPP::OnRenamed);
        watcher->Error   += gcnew ErrorEventHandler(MyClassCPP::OnError);

        watcher->Filter = "*.txt";
        watcher->IncludeSubdirectories = true;
        watcher->EnableRaisingEvents = true;

        Console::WriteLine("Press enter to exit.");
        Console::ReadLine();

        return 0;
    }

private:

    static void OnChanged(Object^ sender, FileSystemEventArgs^ e)
    {
        if (e->ChangeType != WatcherChangeTypes::Changed)
        {
            return;
        }
        Console::WriteLine("Changed: {0}", e->FullPath);
    }

    static void OnCreated(Object^ sender, FileSystemEventArgs^ e)
    {
        Console::WriteLine("Created: {0}", e->FullPath);
    }

    static void OnDeleted(Object^ sender, FileSystemEventArgs^ e)
    {
        Console::WriteLine("Deleted: {0}", e->FullPath);
    }

    static void OnRenamed(Object^ sender, RenamedEventArgs^ e)
    {
        Console::WriteLine("Renamed:");
        Console::WriteLine("    Old: {0}", e->OldFullPath);
        Console::WriteLine("    New: {0}", e->FullPath);
    }

    static void OnError(Object^ sender, ErrorEventArgs^ e)
    {
        PrintException(e->GetException());
    }

    static void PrintException(Exception^ ex)
    {
        if (ex != nullptr)
        {
            Console::WriteLine("Message: {0}", ex->Message);
            Console::WriteLine("Stacktrace:");
            Console::WriteLine(ex->StackTrace);
            Console::WriteLine();
            PrintException(ex->InnerException);
        }
    }
};


int main()
{
    MyClassCPP::Run();
}
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. Dosyaları yerel bir bilgisayarda, ağ sürücüsünde veya uzak bilgisayarda 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 . 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ınFilter.

Dizinde veya dosyada izleyebileceğiniz çeşitli değişiklik türleri vardır. Örneğin, içindeki Attributes``LastWrite değişiklikleri, tarih ve saati ya da dosya veya 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. .

Dosyaları veya dizinleri yeniden adlandırmayı, silmeyi veya oluşturmayı 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 birçok 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, arabellek boyutunu özelliğiyle InternalBufferSize artırmak pahalıdır, bu nedenle arabelleği 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ı kullanırken aşağıdakilere FileSystemWatcher dikkat edin.

  • 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" değişikliği "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 oluşturulur. Güvenlik talepleri hakkında ayrıntılı bilgi için bkz. Talepleri Bağlama.

  • 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 klasör ve içeriği için yeniden adlandırma eylemi olarak yorumlar. İzlenen bir klasöre dosyaları olan bir klasörü kesip yapıştırırsanız, FileSystemWatcher nesne yalnızca klasörü yeni olarak bildirir, ancak içeriğine göre değil, temelde yalnızca yeniden adlandırılır.

Klasörlerin içeriğinin izlenen bir klasöre taşındığını veya kopyalandığının bildirilmesi için, aşağıdaki tabloda önerildiği gibi ve OnRenamed olay işleyicisi yöntemlerini sağlayınOnChanged.

Olay İşleyicisi İşlenen Olaylar Gerçekleştirir
OnChanged Changed, Created, Deleted Dosya özniteliklerindeki değişiklikleri, oluşturulan dosyaları ve silinen dosyaları 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ğıdakiler tarafından 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 tetiklenebilir. Ö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. Daha kısa adlar kullanarak bu dosyaları yeniden adlandırmayı göz önünde bulundurun.

  • Olay işleme kodunuzu olabildiğince kısa tutun.

Oluşturucular

FileSystemWatcher()

FileSystemWatcher sınıfının yeni bir örneğini başlatır.

FileSystemWatcher(String)

İzlenecek belirtilen dizine göre sınıfının yeni bir örneğini FileSystemWatcher başlatır.

FileSystemWatcher(String, String)

belirtilen dizin ve izlenecek dosya türüne göre sınıfının yeni bir örneğini FileSystemWatcher başlatır.

Özellikler

CanRaiseEvents

Bileşenin bir 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

Bir dizinde hangi dosyaların izlendiğ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

İzlenmek üzere değişiklik türünü alır veya ayarlar.

Path

İzleyebileceğiniz dizinin yolunu alır veya ayarlar.

Site

için FileSystemWatcherbir ISite 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

BeginInit()

Formda kullanılan veya başka bir bileşen tarafından kullanılan bir FileSystemWatcher öğesinin başlatılmasını başlatır. Başlatma, çalışma zamanında olur.

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()

Component tarafından kullanılan tüm kaynakları serbest bırakır.

(Devralındığı yer: Component)
Dispose(Boolean)

FileSystemWatcher tarafından kullanılan yönetilmeyen kaynakları serbest bırakır ve yönetilen kaynakları isteğe bağlı olarak 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 olur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
Finalize()

Geçerli örnek tarafından tutulan kaynakları serbest bırakır.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetLifetimeService()
Kullanımdan kalktı.

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 tarafından Component Containersağlanan bir hizmeti temsil eden bir nesnesi döndürür.

(Devralındığı yer: Component)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
InitializeLifetimeService()
Kullanımdan kalktı.

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 Objectöğesinin sığ 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ı Componentiçeren bir String döndürür. Bu yöntem geçersiz kılınmamalıdır.

(Devralındığı yer: Component)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)
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.

WaitForChanged(WatcherChangeTypes, Int32)

İzlemek istediğiniz değişikliğin türü ve zaman aşımına uğramadan önce bekleme süresi (milisaniye cinsinden) 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.

Ekinlikler

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ı tarafından 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.