2013-03-21 38 views
7

Wystarczy napisać aplikację, aby śledzić relację między plikami na dysku.Sposób przechwytywania szczegółów zdarzenia kopiowania/przenoszenia plików, takiego jak nazwa pliku źródłowego

Wiemy, że FileSystemWatcher może wywoływać alarmy podczas tworzenia, zmiany nazwy lub usuwania pliku.

Ale FileSystemWatcher nie może podać nam ścieżki pliku źródłowego.

Na przykład, powiedzmy, że jest to plik F1 w folder1, a następnie skopiować F1 do innego folderu o nazwie folder2, nowa nazwa pliku jest wciąż F1. W tym przypadku FileSystemWatcher może nam powiedzieć, że nowy plik został utworzony w folder2. Ale nie może nam powiedzieć, że nowa kopia F1 została skopiowana z F1 w folder1, podczas gdy ta informacja jest nam potrzebna.

Jakieś myśli?

+1

Interesujące pytanie. – David

+3

Prawdopodobnie będziesz musiał monitorować zarówno foldery źródłowe, jak i docelowe, a następnie spróbować dopasować pliki znikające ze źródła do plików pojawiających się w celu, prawdopodobnie porównując ich nazwy/rozmiary, a nawet sumy kontrolne. –

+0

Podobny do tego, co sugerował @Branko. Jeśli utworzę strukturę danych drzewa folderów w folderze Folder1 i folder2 w czasie T0, a następnie wykonam ruch plików, a następnie ponownie utworzę strukturę T1 nowego folderu. Teraz porównuję drzewo Folder 1 {T0, T1} i Folder 2 {T0, T2} i zestawię różnicę. – dekdev

Odpowiedz

2

to dlatego, że nie ma takich operacji jak „skopiować plik”, o ile system plików jest zaniepokojony.

Po uruchomieniu polecenia kopiowania plików faktycznie otwiera stary plik, tworzy nowy plik, odczytuje zawartość do pamięci, zapisuje do nowych plików, a następnie zamyka oba. Wszystkie systemy plików są zapisywane; nie ma systemu śledzenia plam, który pozwalałby określić, czy dane rzeczywiście pochodzą z innego pliku bez modyfikacji.

Ostatnim krokiem, który odróżnia kopię pliku od zapisania danych w pliku, jest to, że metadane miejsca docelowego są zmieniane w celu dopasowania do źródła. Ale znowu system plików nie wie, dlaczego zmieniasz atrybuty lub plik, który pasujesz do nich dwa.

System plików ma szczególną świadomość łączenia i rozłączania. Tak więc ruch, który składa się z "Utwórz drugi link do treści, usuń pierwszy link" jest wykrywalny. Jeśli kopiowanie zostało zaimplementowane jako "utwórz nowy link oznaczony do kopiowania przy zapisie", możesz go znaleźć, ale kopiowanie przy zapisie nie jest bardzo popularną funkcją systemu plików.

0

Rzecz polega na tym, że nie zostanie uruchomione zdarzenie kopiowania dla folderu "f1".

Co powoduje wyświetlenie pliku do folderu 1 to: aktualizacja pliku, skopiowanie pliku z innego katalogu do "f1" lub usunięcie pliku.

możesz spróbować użyć dwóch plików w "f1" .. w tym samym czasie, gdy skopiujesz plik do "f2" możesz zaktualizować drugi plik, uruchamiając procedurę obsługi zdarzenia aktualizacji ......... .

nadzieję, że to pomaga ....