FileSystemWatcher Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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
- Ö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ő. |