FileSystemWatcher Osztály

Definíció

Figyeli a fájlrendszer változásértesítéseit, és eseményeket hoz létre, amikor egy könyvtár vagy egy könyvtárban lévő fájl megváltozik.

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
Öröklődés
FileSystemWatcher
Öröklődés
FileSystemWatcher
Attribútumok
Megvalósítás

Példák

Az alábbi példa létrehoz egy parancsot FileSystemWatcher a futtatáskor megadott könyvtár megtekintéséhez. Az összetevő úgy van beállítva, hogy figyelje a könyvtárban LastWrite lévő szövegfájlok módosítását és LastAccess idejét, létrehozását, törlését vagy átnevezését. Ha egy fájlt módosít, létrehoz vagy töröl, a fájl elérési útja a konzolra kerül. A fájl átnevezésekor a régi és az új elérési utak a konzolra kerülnek.

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

Megjegyzések

Egy adott könyvtár módosításainak figyelésére használható FileSystemWatcher . Megtekintheti a megadott könyvtár fájljainak és alkönyvtárainak változásait. Létrehozhat egy összetevőt a fájlok helyi számítógépen, hálózati meghajtón vagy távoli számítógépen való megtekintéséhez.

Az összes fájl módosításainak megtekintéséhez állítsa a Filter tulajdonságot üres sztringre ("") vagy használjon helyettesítő karaktereket ("*.*"). Egy adott fájl megtekintéséhez állítsa a Filter tulajdonságot a fájlnévre. Ha például a fájl MyDoc.txtmódosításait szeretné megtekinteni, állítsa a tulajdonságot a Filter következőre "MyDoc.txt": . Egy bizonyos fájltípus módosításait is megtekintheti. Ha például a szövegfájlok változásait szeretné megtekinteni, állítsa a tulajdonságot a Filter következőre "*.txt": .

Egy könyvtárban vagy fájlban többféle módosítást is megtekinthet. Megtekintheti például a fájlok vagy könyvtárak változásait Attributes, LastWrite a dátumot és az Size időt. Ez úgy történik, hogy a tulajdonságot NotifyFilter az NotifyFilters egyik értékre állítja. A megtekinthető módosítások típusával kapcsolatos további információkért lásd: NotifyFilters.

Megtekintheti a fájlok vagy könyvtárak átnevezését, törlését vagy létrehozását. Ha például meg szeretné nézni a szövegfájlok átnevezését, állítsa a Filter tulajdonságot "*.txt" értékre, és hívja meg a WaitForChanged metódust egy Renamed megadott paraméterrel.

A Windows operációs rendszer értesíti az összetevőt a fájlmódosításokról egy a rendszer által létrehozott pufferben. Ha rövid idő alatt sok változás történik, a puffer túlcsordulhat. Ez azt eredményezi, hogy az összetevő elveszíti a címtár változásainak nyomon követését, és csak általános értesítést küld. A puffer méretének a tulajdonsággal való InternalBufferSize növelése költséges, mivel a nem lapozott memóriából származik, amelyet nem lehet lemezre cserélni, ezért tartsa a puffert kicsinek, de elég nagynak ahhoz, hogy ne hagyja ki a fájlmódosítási eseményeket. A puffer túlcsordulásának elkerülése érdekében használja a NotifyFilter és a IncludeSubdirectories tulajdonságokat, hogy kiszűrhesse a nem kívánt változásértesítéseket.

Egy példány kezdeti tulajdonságértékeinek FileSystemWatcherlistáját a FileSystemWatcher konstruktorban találja.

Az osztály használatakor vegye figyelembe a FileSystemWatcher következő tényeket:

  • A rejtett fájlokat a rendszer nem hagyja figyelmen kívül.
  • Egyes rendszerekben FileSystemWatcher a rövid 8.3 fájlnévformátum használatával jelenti a fájlok változásait. Például a "LongFileName.LongExtension" módosítás "LongFil~.Lon" néven jelenthető.
  • A címtárak hálózaton keresztüli monitorozásához beállított InternalBufferSize maximális méret 64 KB.

Mappák másolása és áthelyezése

Az operációs rendszer és FileSystemWatcher az objektum a kivágás és beillesztés műveletet vagy az áthelyezési műveletet átnevező műveletként értelmezi egy mappa és annak tartalma esetében. Ha fájlokat tartalmazó mappát vág ki és illeszt be egy figyelt mappába, az FileSystemWatcher objektum csak újként jelenti a mappát, de tartalmát nem, mert lényegében csak átnevezték őket.

Ha értesítést szeretne kapni arról, hogy a mappák tartalmát áthelyezték vagy átmásolták egy figyelt mappába, adja meg OnChanged és OnRenamed eseménykezelő metódusokat az alábbi táblázatban javasolt módon.

Eseménykezelő Kezelt események Elvégez
OnChanged \, \, \ A fájlattribútumok, a létrehozott fájlok és a törölt fájlok változásainak jelentése.
OnRenamed Renamed Sorolja fel az átnevezett fájlok és mappák régi és új elérési útját, szükség esetén rekurzívan bővülve.

Események és pufferméretek

Vegye figyelembe, hogy számos tényező befolyásolhatja, hogy mely fájlrendszer-változási események lépnek fel, az alábbiak szerint:

  • A fájlrendszer gyakori műveletei több eseményt is eredményezhetnek. Ha például egy fájl átkerül az egyik könyvtárból a másikba, több OnChanged és néhány OnCreatedOnDeleted esemény is felmerülhet. A fájlok áthelyezése összetett művelet, amely több egyszerű műveletből áll, ezért több eseményt hoz létre. Hasonlóképpen, egyes alkalmazások (például víruskereső szoftverek) további fájlrendszeres eseményeket okozhatnak, amelyeket a FileSystemWatcherrendszer észlel.
  • A FileSystemWatcher lemezek mindaddig megtekinthetők, amíg nem cserélik ki vagy nem távolítják el őket. A FileSystemWatcher esetében nem generál eseményeket a CD-k és DVD-k számára, mert az időbélyegek és a tulajdonságok nem módosíthatók. A távoli számítógépeken telepítve kell lennie az összetevő megfelelő működéséhez szükséges platformok egyikének.

Vegye figyelembe, hogy a FileSystemWatcher pufferméret túllépésekor előfordulhat, hogy egy esemény nem jelenik meg. A hiányzó események elkerülése érdekében kövesse az alábbi irányelveket:

  • Növelje a puffer méretét a InternalBufferSize tulajdonság beállításával.
  • Kerülje a hosszú fájlnevekkel rendelkező fájlok figyelését, mert a hosszú fájlnév hozzájárul a puffer feltöltéséhez. Fontolja meg a fájlok átnevezését rövidebb nevek használatával.
  • Tartsa a lehető legrövidebbre az eseménykezelési kódot.

Konstruktorok

Name Description
FileSystemWatcher()

Inicializálja a FileSystemWatcher osztály új példányát.

FileSystemWatcher(String, String)

Inicializálja az FileSystemWatcher osztály új példányát a megadott könyvtár és a figyelendő fájlok típusa alapján.

FileSystemWatcher(String)

Inicializálja az osztály új példányát FileSystemWatcher , mivel a megadott könyvtárat figyelni szeretné.

Tulajdonságok

Name Description
CanRaiseEvents

Beolvas egy értéket, amely jelzi, hogy az összetevő képes-e eseményt létrehozni.

(Öröklődés forrása Component)
Container

Lekéri a IContainer .Component

(Öröklődés forrása Component)
DesignMode

Olyan értéket kap, amely jelzi, hogy az Component aktuálisan tervezési módban van-e.

(Öröklődés forrása Component)
EnableRaisingEvents

Lekéri vagy beállít egy értéket, amely jelzi, hogy az összetevő engedélyezve van-e.

Events

Lekéri az ehhez Componentcsatolt eseménykezelők listáját.

(Öröklődés forrása Component)
Filter

Lekéri vagy beállítja a könyvtárban figyelt fájlok meghatározásához használt szűrősztringet.

Filters

Lekéri a címtárban figyelt fájlok meghatározásához használt összes szűrő gyűjteményét.

IncludeSubdirectories

Lekéri vagy beállít egy értéket, amely jelzi, hogy a megadott elérési út alkönyvtárait figyelni kell-e.

InternalBufferSize

Lekéri vagy beállítja a belső puffer méretét (bájtban).

NotifyFilter

Lekéri vagy beállítja a figyelendő módosítások típusát.

Path

Lekéri vagy beállítja a figyelendő könyvtár elérési útját.

Site

Lekéri vagy beállítja ISite a FileSystemWatcher.

SynchronizingObject

Lekéri vagy beállítja azt az objektumot, amellyel a címtárváltozás miatt kiadott eseménykezelő hívásokat meg lehet indítani.

Metódusok

Name Description
BeginInit()

Egy űrlapon használt vagy egy másik összetevő által használt elem inicializálásának FileSystemWatcher megkezdése. Az inicializálás futásidőben történik.

CreateObjRef(Type)

Létrehoz egy objektumot, amely tartalmazza a távoli objektumokkal való kommunikációhoz használt proxy létrehozásához szükséges összes releváns információt.

(Öröklődés forrása MarshalByRefObject)
Dispose()

Felszabadítja a nem felügyelt erőforrásokat, amelyeket a FileSystemWatcher.

Dispose()

Felszabadítja a .-hez használt összes erőforrást Component.

(Öröklődés forrása Component)
Dispose(Boolean)

Felszabadítja a felügyelt erőforrások által FileSystemWatcher használt nem felügyelt erőforrásokat, és opcionálisan felszabadítja a felügyelt erőforrásokat.

EndInit()

Egy űrlapon használt vagy egy másik összetevő által használt inicializálásának FileSystemWatcher befejezése. Az inicializálás futásidőben történik.

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetLifetimeService()
Elavult.

Lekéri a példány élettartamszabályzatát vezérlő aktuális élettartam-szolgáltatásobjektumot.

(Öröklődés forrása MarshalByRefObject)
GetService(Type)

Olyan objektumot ad vissza, amely az általa vagy annak által ComponentContainernyújtott szolgáltatást jelöli.

(Öröklődés forrása Component)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
InitializeLifetimeService()
Elavult.

Beolvas egy élettartam-szolgáltatásobjektumot a példány élettartam-szabályzatának szabályozásához.

(Öröklődés forrása MarshalByRefObject)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
MemberwiseClone(Boolean)

Az aktuális MarshalByRefObject objektum sekély másolatát hozza létre.

(Öröklődés forrása MarshalByRefObject)
OnChanged(FileSystemEventArgs)

Az eseményt emeli Changed ki.

OnCreated(FileSystemEventArgs)

Az eseményt emeli Created ki.

OnDeleted(FileSystemEventArgs)

Az eseményt emeli Deleted ki.

OnError(ErrorEventArgs)

Az eseményt emeli Error ki.

OnRenamed(RenamedEventArgs)

Az eseményt emeli Renamed ki.

ToString()

String A ( ha van) nevet tartalmazó értéket Componentad vissza. Ezt a módszert nem szabad felülírni.

(Öröklődés forrása Component)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)
WaitForChanged(WatcherChangeTypes, Int32)

Szinkron metódus, amely egy olyan struktúrát ad vissza, amely konkrét információkat tartalmaz a bekövetkezett változásról, figyelembe véve a figyelni kívánt módosítás típusát és az időt (ezredmásodpercben) az időzítés előtt.

WaitForChanged(WatcherChangeTypes, TimeSpan)

Szinkron módon egy olyan struktúrát ad vissza, amely konkrét információkat tartalmaz a bekövetkezett változásról, tekintettel a figyelendő változás típusára.

WaitForChanged(WatcherChangeTypes)

Szinkron metódus, amely egy olyan struktúrát ad vissza, amely konkrét információkat tartalmaz a bekövetkezett változásról, a figyelni kívánt módosítás típusától függően.

esemény

Name Description
Changed

A megadott Path fájl vagy könyvtár módosításakor fordul elő.

Created

A megadott Path fájl vagy könyvtár létrehozásakor fordul elő.

Deleted

Akkor fordul elő, ha a megadott Path fájl vagy könyvtár törlődik.

Disposed

Akkor fordul elő, ha az összetevőt a metódus hívása megsemmisíti Dispose() .

(Öröklődés forrása Component)
Error

Akkor fordul elő, ha a példány FileSystemWatcher nem tudja folytatni a változások monitorozását, vagy ha a belső puffer túlcsordul.

Renamed

A megadott Path fájl vagy könyvtár átnevezésekor fordul elő.

A következőre érvényes:

Lásd még