2012-01-06 14 views
6

Próbuję śledzić pliki kopiowane przez użytkowników i inne aplikacje. Plik FileSystemWatch zawiera tylko zdarzenia dla Zmieniono, Utworzono, Usunięte, Usunięto, Błąd i Zmieniono nazwę. Nie uruchamia zdarzenia, gdy dostęp do pliku odbywa się za pomocą funkcji kopiowania lub w przypadku, gdy nowy plik jest kopiowany.C# Śledź skopiowane pliki

Czy istnieje metoda monitorowania zdarzenia/funkcji kopiowania systemu Windows?

+0

Czy można zamiast tego oglądać w instancji schowka? Tylko myśl. http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx –

+0

Jak dobrze można tolerować brak śledzenia kopii? Prawdopodobnie możesz śledzić kopie _most_ (na przykład wykonane za pomocą Explorera), ale niektóre z nich się prześlizgną. –

+0

Dlaczego próbujesz to zrobić? – RQDQ

Odpowiedz

4

Nie wiem w żaden sposób za pomocą C#.

Możesz to zrobić, jeśli chcesz napisać numer File System Filter Driver. [Terytorium Zdecydowanie ekspert, jak istnieje możliwość uszkadzania plików i/lub obniżenia systemu] przechwytuje kierowcy filtr

System plików wnioski kierowane do systemu plików lub inny plik sterownika filtru systemu. Przechodząc przez żądanie , zanim osiągnie zamierzony cel, sterownik filtru może rozszerzyć lub zamienić funkcjonalność dostarczoną przez pierwotny cel żądania . Do przykładowych sterowników filtrów plików należą filtry antywirusowe , agenty kopii zapasowych i produkty szyfrujące. Aby opracować systemy plików i sterowniki filtrów systemu plików, należy użyć zestawu IFS (Installable File System), który jest dostarczany z zestawem Windows Driver Kit (WDK).

+1

Sterownik filtru może śledzić oddzielne operacje odczytu i zapisu, ale nie może ustanowić połączenia między dwoma. Nie można zidentyfikować kopiowania w określony sposób. –

1

Robisz to, co trzeba z FileSystemWatcher. System Windows nie ma wbudowanego mechanizmu niezawodnego raportowania kopii.

Można zawiesić procedurę kopiowania systemu operacyjnego, ale to nie gwarantuje dobrych rezultatów: aplikacje mogą zaimplementować własną kopię, otwierając tylko pliki źródłowe i docelowe oraz kopiując bajty.

Zmiana nazwy jest inna, ponieważ zmiana nazwy dokonana przez system operacyjny nie może być łatwo naśladowana innymi metodami, więc można złapać wszystkie nazwy za pomocą FileSystemWatcher. Zwróć uwagę, że przenoszenie między dyskami przypomina raczej kopiowanie: nie otrzymasz powiadomienia o zmianie nazwy, ale zamiast tego zostanie utworzone polecenie Utworzone i usunięte.

Więc jeśli naprawdę naprawdę trzeba zauważyć plik kopiowany uzyskiwanie moja proponowanego podejścia jest to:

  • Hook rozmowy CloseFile, oprócz FileSystemWatcher.
  • Ilekroć plik zostanie zamknięty, może to być spowodowane tym, że jest źródłem lub celem ruchu kopiowania/przenoszenia na różne dyski. Sprawdź jego rozmiar.
  • Jeśli znajdziesz dwa zamknięte pliki o tym samym rozmiarze w rozsądnie krótkim czasie, porównaj zawartość. Dość zasobochłonne, ale jedyny niezawodny sposób na zrobienie tego.
0

Można użyć Auditing file and folder access funkcję systemu Windows, który zapisuje wpis w dzienniku zdarzeń i programy konfiguracyjne można rozpocząć po wystąpieniu takiego zdarzenia

0

Nie mogę myśleć o jakiejkolwiek dobrej drodze.

Dla każdego nowo utworzonego pliku należy sprawdzić, czy istnieje dokładny duplikat (być może z inną nazwą) w dowolnym miejscu systemu plików. Oczywiście można zrobić tę brutalną siłę, ale rozwiązanie byłoby bardzo nieeleganckie, powolne i kruche!

Powiązane problemy