2013-03-21 5 views
7

Sie möchten nur eine Anwendung schreiben, um die Beziehung zwischen den Dateien auf dem Datenträger nachzuverfolgen.So fangen Sie die Details des Dateikopie-/move-Ereignisses ab, z. B. den Quelldateinamen

Wir wissen, dass FileSystemWatcher evetns beim Erstellen, Umbenennen oder Löschen der Datei auslösen kann.

Aber FileSystemWatcher kann den Pfad der Quelldatei nicht angeben.

Zum Beispiel, sagen wir mal eine Datei F1 im folder1 ist, und kopieren wir dann F1 in einen anderen Ordner mit dem Namen folder2, der neue Dateiname ist noch F1. In diesem Fall könnte uns die FileSystemWatcher mitteilen, dass eine neue Datei in folder2 erstellt wurde. Aber es kann uns nicht sagen, dass das neue F1 von F1 in folder1 kopiert wird, während diese Information ist, was wir brauchen.

Irgendwelche Gedanken?

+1

Interessante Frage. – David

+3

Sie müssen wahrscheinlich sowohl Quell- als auch Zielordner überwachen und dann versuchen, die aus der Quelle verschwundenen Dateien mit den im Ziel angezeigten Dateien abzugleichen, möglicherweise durch Vergleichen ihrer Namen/Größen oder sogar Prüfsummen. –

+0

Ähnlich wie bei @Branko vorgeschlagen. Wenn ich zum Zeitpunkt T0 eine Folder Tree Data Struktur von Folder1 und Folder2 mache und dann eine Datei Movement mache und dann erneut eine New FolderTree Struktur T1 anlege. Jetzt vergleiche ich den Ordner 1 {T0, T1} und den Ordner 2 {T0, T2} und sortiere den Unterschied. – dekdev

Antwort

2

Dies ist, weil es keine solche Operation als „eine Datei kopieren“ ist, so weit das Dateisystem betroffen ist.

Wenn Sie einen Dateikopierbefehl ausführen, wird die alte Datei geöffnet, die neue Datei erstellt, der Inhalt wird in den Speicher gelesen, in die neuen Dateien geschrieben und dann beide Dateien geschlossen. Das ganze Dateisystem sieht Schreibvorgänge; Es gibt kein Taint-Tracking-System, um zu bestimmen, dass die Daten tatsächlich aus einer anderen Datei stammen, ohne dass Änderungen vorgenommen wurden.

Der letzte Schritt, der die Dateikopie vom normalen Schreiben in eine Datei unterscheidet, besteht darin, dass die Metadaten des Ziels entsprechend der Quelle geändert werden. Aber auch hier weiß das Dateisystem nicht, warum Sie die Attribute oder die Datei, mit der Sie sie vergleichen, ändern.

Das Dateisystem hat nur spezielle Kenntnisse über das Verknüpfen und Aufheben der Verknüpfung. So ist das Verschieben, das aus "zweiten Link zum Inhalt erstellen; erster Link entfernen" erkennbar ist. Wenn das Kopieren als "create new link for copy-on-write" implementiert wurde, könnten Sie es entdecken, aber Copy-on-Write ist kein sehr beliebtes Dateisystemmerkmal.

0

die Sache ist: Sie haben keine Kopie Ereignis für den Ordner "f1" gefeuert.

Was löst die Dateiüberwachung für Ordner 1 aus: Aktualisierung einer Datei, Kopieren einer Datei aus einem anderen Verzeichnis nach "f1" oder Löschen einer Datei.

Sie können versuchen, zwei Dateien in "f1" zu verwenden. Zur gleichen Zeit, wenn Sie die Datei nach "f2" kopieren, können Sie die zweite Datei aktualisieren, wodurch der Update-Ereignishandler ausgelöst wird ......... das hilft.

Hoffnung ....

Verwandte Themen