Sdílet prostřednictvím


System.IO.FileSystemWatcher – třída

Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.

Slouží FileSystemWatcher ke sledování změn v zadaném adresáři. Můžete sledovat změny v souborech a podadresářích zadaného adresáře. Můžete vytvořit komponentu pro sledování souborů na místním počítači, na síťové jednotce nebo na vzdáleném počítači.

Pokud chcete sledovat změny ve všech souborech, nastavte Filter vlastnost na prázdný řetězec ("") nebo použijte zástupné znaky (*.*). Pokud chcete sledovat konkrétní soubor, nastavte Filter vlastnost na název souboru. Pokud chcete například sledovat změny v souboru MyDoc.txt, nastavte Filter vlastnost na "MyDoc.txt". Můžete také sledovat změny v určitém typu souboru. Pokud chcete například sledovat změny v textových souborech, nastavte Filter vlastnost na "*.txt".

V adresáři nebo souboru můžete sledovat několik typů změn. Můžete například sledovat změny v Attributes, LastWrite datu a čase nebo ve Size souborech či adresářích. To se provádí nastavením NotifyFilter vlastnosti na jednu z NotifyFilters hodnot. Další informace o typu změn, které můžete sledovat, najdete v tématu NotifyFilters.

Můžete sledovat přejmenování, odstranění nebo vytváření souborů nebo adresářů. Chcete-li například sledovat přejmenování textových souborů, nastavte Filter vlastnost na "*.txt" a zavolejte metodu WaitForChanged se zadaným parametrem Renamed .

Operační systém Windows upozorní vaši komponentu na změny souboru ve vyrovnávací paměti vytvořené nástrojem FileSystemWatcher. Pokud v krátké době dojde k mnoha změnám, může vyrovnávací paměť přetékat. Tímto komponenta ztratí přehled o změnách v adresáři a poskytne pouze obecné oznámení. Zvětšení vyrovnávací paměti s InternalBufferSize vlastností je nákladné, protože pochází z nestránkované paměti, která se nedá vyměnit na disk, takže vyrovnávací paměť je dostatečně malá, aby nedošlo k vynechání událostí změny souboru. Abyste se vyhnuli přetečení vyrovnávací paměti, použijte vlastnosti NotifyFilter a IncludeSubdirectories ke filtrovaní nežádoucích oznámení o změnách.

Seznam počátečních hodnot vlastností pro instanci FileSystemWatchernaleznete v konstruktoru FileSystemWatcher .

Úvahy při používání třídy FileSystemWatcher:

  • Skryté soubory nejsou ignorovány.
  • V některých systémech FileSystemWatcher hlásí změny souborů pomocí krátkého formátu názvu souboru 8.3. Například změna na "LongFileName.LongExtension" může být uvedena jako "LongFil~.Lon".
  • Tato třída obsahuje požadavek na propojení a poptávku dědičnosti na úrovni třídy, která se vztahuje na všechny členy. Vyvolá se SecurityException, pokud buď bezprostřední volající, nebo odvozená třída nemá oprávnění plné důvěryhodnosti. Podrobnosti o požadavcích na zabezpečení najdete v tématu Požadavky propojení.
  • Maximální velikost, kterou můžete nastavit pro InternalBufferSize vlastnost pro monitorování adresáře přes síť, je 64 kB.

Kopírování a přesouvání složek

Operační systém a FileSystemWatcher objekt interpretují akci vyjmutí a vložení nebo akci přesunutí jako akci přejmenování složky a jejího obsahu. Pokud vyjmete a vložíte složku se soubory do sledované složky, FileSystemWatcher objekt hlásí pouze složku jako novou, ale ne její obsah, protože jsou v podstatě přejmenovány.

Chcete-li být upozorněni, že obsah složek byl přesunut nebo zkopírován do sledované složky, zadejte OnChanged a OnRenamed metody obslužné rutiny událostí, jak je navrženo v následující tabulce.

Handler události Události zpracovávané Provádí
OnChanged Changed, , CreatedDeleted Oznamte změny v atributech souborů, vytvoření souborů a odstranění souborů.
OnRenamed Renamed Vypište staré a nové cesty přejmenovaných souborů a složek, v případě potřeby rozšiřujte rekurzivně.

Události a velikosti vyrovnávací paměti

Všimněte si, že několik faktorů může ovlivnit, které události změn systému souborů jsou vyvolány, jak je popsáno níže:

  • Běžné operace systému souborů můžou vyvolat více než jednu událost. Například když se soubor přesune z jednoho adresáře do jiného, může dojít k vyvolání několika OnChanged událostí, některých OnCreated událostí a OnDeleted událostí. Přesunutí souboru je složitá operace, která se skládá z několika jednoduchých operací, a proto vyvolává více událostí. Podobně některé aplikace (například antivirový software) mohou způsobit další události systému souborů, které mohou být detekovány FileSystemWatcher.
  • Sledovat disky FileSystemWatcher lze, dokud se nepřepnou nebo neodeberou. Komponenta FileSystemWatcher nevyvolává události pro disky CD a DVD, protože časová razítka a vlastnosti se nemohou změnit. Vzdálené počítače musí mít nainstalovanou jednu z požadovaných platforem, aby komponenta fungovala správně.

Všimněte si, že FileSystemWatcher při překročení velikosti vyrovnávací paměti může chybět událost. Pokud se chcete vyhnout chybějícím událostem, postupujte podle těchto pokynů:

  • Zvětšete velikost vyrovnávací paměti nastavením vlastnosti InternalBufferSize.
  • Vyhněte se sledování souborů s dlouhými názvy souborů, protože dlouhý název souboru přispívá k vyplnění vyrovnávací paměti. Zvažte přejmenování těchto souborů pomocí kratších názvů.
  • Udržujte kód pro zpracování událostí co nejkratší.