2010-12-15 4 views
5

używam FileSystemWatcher monitorowanie folderu A. Jeśli plik jest tworzony lub skopiowane do tego folderu, zostanie on przeniesiony do folderu B.FileSystemWatcher nie z 1000 plików kreacji

stworzyłem plik w folderze A przez klikając prawym przyciskiem myszy, wybierając "Nowy", wybierz "Dokument tekstowy". Plik zostanie natychmiast przeniesiony do folderu B. Ale jeśli użyję programu do utworzenia 1000 plików w folderze A, to nie zostaną one przeniesione do folderu B. Jak mogłoby się wydawać, FileSystemWatcher nie może wykryć 1000 plików utworzonych przez program.

Czy ktoś może mi to wyjaśnić?

Odpowiedz

15

Wygląda na to, że plik 1000 przepełni bufor FileSystemWatcher. Świetne explanation here.

link Fragment:

Rozmiar bufora i Error Event

Prace klasy FileSystemWatcher przez przechwytywania wszystkich istotnych plików i starszych zmian i wprowadzania ich do bufora . Jest to następnie przetwarzane po jednej zmianie , dopóki wszystkie powiadomienia nie zostaną przetworzone, a bufor pusty. Domyślnie bufor wewnętrzny ma rozmiar ośmiu kilobajtów (8192 bajtów). Każde zdarzenie może zająć do szesnastu bajtów bufora dla swoich danych, bez nazwy pliku . Oznacza to, że w przypadku dużej liczby zmian w krótkim okresie czasu wynoszącym , bufor może szybko zostać przeciążony , a powiadomienia mogą zostać utracone w postaci .

Obsługa odpowiedniego zdarzenia błędu z FileSystemWatcher pozwoli ci kodować tę możliwość. Na przykład. Zbadaj i/lub działaj w folderze zdarzenia błędu za pomocą własnej logiki ...

+0

Dzięki Paul masz rację. Po zwiększeniu rozmiaru bufora mój program został pomyślnie uruchomiony. – Linh