System.IO.FileSystemWatcher, klasa

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

Użyj FileSystemWatcher polecenia , aby wyszukać zmiany w określonym katalogu. Możesz obserwować zmiany w plikach i podkatalogach określonego katalogu. Można utworzyć składnik do oglądania plików na komputerze lokalnym, dysku sieciowym lub komputerze zdalnym.

Aby wyszukać zmiany we wszystkich plikach, ustaw Filter właściwość na pusty ciąg ("") lub użyj symboli wieloznacznych ("*.*"). Aby obejrzeć określony plik, ustaw Filter właściwość na nazwę pliku. Aby na przykład wyszukać zmiany w pliku MyDoc.txt, ustaw Filter właściwość na "MyDoc.txt". Możesz również obserwować zmiany w określonym typie pliku. Aby na przykład wyszukać zmiany w plikach tekstowych, ustaw Filter właściwość na "*.txt".

Istnieje kilka typów zmian, które można obserwować w katalogu lub pliku. Można na przykład obserwować zmiany w Attributespliku , LastWrite datę i godzinę lub Size pliki lub katalogi. W tym celu należy ustawić NotifyFilter właściwość na jedną z NotifyFilters wartości. Aby uzyskać więcej informacji na temat typu zmian, które można obejrzeć, zobacz NotifyFilters.

Możesz obserwować zmianę nazw, usuwanie lub tworzenie plików lub katalogów. Aby na przykład wyszukać zmianę nazw plików tekstowych, ustaw Filter właściwość na "*.txt" i wywołaj WaitForChanged metodę z określonym parametrem Renamed .

System operacyjny Windows powiadamia składnik zmian plików w buforze utworzonym przez program FileSystemWatcher. Jeśli w krótkim czasie istnieje wiele zmian, bufor może przepełnić się. Spowoduje to utratę śledzenia zmian w katalogu przez składnik, który będzie dostarczać tylko ogólne powiadomienia. Zwiększenie rozmiaru buforu z właściwością InternalBufferSize jest kosztowne, ponieważ pochodzi z niestronicowanej pamięci, której nie można zamienić na dysk, więc zachowaj bufor tak mały, jak i wystarczająco duży, aby nie przegapić żadnych zdarzeń zmiany pliku. Aby uniknąć przepełnienia buforu, użyj NotifyFilter właściwości i IncludeSubdirectories , aby odfiltrować niechciane powiadomienia o zmianie.

Aby uzyskać listę początkowych wartości właściwości dla wystąpienia FileSystemWatcherprogramu , zobacz FileSystemWatcher konstruktor.

Zagadnienia dotyczące korzystania z FileSystemWatcher klasy:

  • Ukryte pliki nie są ignorowane.
  • W niektórych systemach raporty zmiany w plikach FileSystemWatcher przy użyciu krótkiego formatu nazwy pliku 8.3. Na przykład można zgłosić zmianę na "LongFileName.LongExtension" jako "LongFil~". Lon".
  • Ta klasa zawiera żądanie łącza i dziedziczenia na poziomie klasy stosowane do wszystkich składowych. Element SecurityException jest zgłaszany, gdy bezpośredni obiekt wywołujący lub klasa pochodna nie ma uprawnienia pełnego zaufania. Aby uzyskać szczegółowe informacje o wymaganiach dotyczących zabezpieczeń, zobacz Link Demands (Żądania linków).
  • Maksymalny rozmiar, który można ustawić dla InternalBufferSize właściwości monitorowania katalogu za pośrednictwem sieci, wynosi 64 KB.

Kopiowanie i przenoszenie folderów

System operacyjny i obiekt interpretują akcję wycinania i FileSystemWatcher wklejania lub akcję przenoszenia jako akcję zmiany nazwy folderu i jego zawartości. Jeśli wyciąć i wkleić folder z plikami do obserwowanego folderu, FileSystemWatcher obiekt zgłasza tylko folder jako nowy, ale nie jego zawartość, ponieważ są one zasadniczo tylko zmieniane.

Aby otrzymywać powiadomienia, że zawartość folderów została przeniesiona lub skopiowana do obserwowanego folderu, podaj OnChanged metody obsługi zdarzeń i OnRenamed zgodnie z sugestią w poniższej tabeli.

Program obsługi zdarzeń Obsługiwane zdarzenia Wykonuje
OnChanged Changed, , CreatedDeleted Zgłaszanie zmian w atrybutach pliku, utworzonych plikach i usuniętych plikach.
OnRenamed Renamed Wyświetl stare i nowe ścieżki zmienionych plików i folderów, rozwijając się rekursywnie w razie potrzeby.

Zdarzenia i rozmiary buforów

Należy pamiętać, że kilka czynników może mieć wpływ na wywoływane zdarzenia zmiany systemu plików, zgodnie z opisem w następujący sposób:

  • Typowe operacje systemu plików mogą zgłaszać więcej niż jedno zdarzenie. Na przykład po przeniesieniu pliku z jednego katalogu do innego może zostać zgłoszonych kilka OnChanged i niektóre OnCreatedOnDeleted zdarzenia. Przenoszenie pliku jest złożoną operacją składającą się z wielu prostych operacji, co zwiększa wiele zdarzeń. Podobnie niektóre aplikacje (na przykład oprogramowanie antywirusowe) mogą powodować dodatkowe zdarzenia systemu plików wykryte przez FileSystemWatcherprogram .
  • Dysk FileSystemWatcher może obserwować tak długo, jak nie są przełączane ani usuwane. Element FileSystemWatcher nie zgłasza zdarzeń dla dysków CD i DVD, ponieważ sygnatury czasowe i właściwości nie mogą ulec zmianie. Komputery zdalne muszą mieć jedną z wymaganych platform zainstalowanych, aby składnik działał prawidłowo.

Pamiętaj, że FileSystemWatcher zdarzenie może zostać pominięte po przekroczeniu rozmiaru buforu. Aby uniknąć brakujących zdarzeń, postępuj zgodnie z następującymi wytycznymi:

  • Zwiększ rozmiar buforu, ustawiając InternalBufferSize właściwość .
  • Unikaj oglądania plików z długimi nazwami plików, ponieważ długa nazwa pliku przyczynia się do wypełniania buforu. Rozważ zmianę nazw tych plików przy użyciu krótszych nazw.
  • Zachowaj możliwie najkrótszy kod obsługi zdarzeń.