2013-03-21 14 views
7

Voglio solo scrivere un'applicazione per tenere traccia della relazione tra i file nel disco.Come catturare i dettagli dell'evento di copia/spostamento del file, come il nome del file sorgente

Sappiamo che FileSystemWatcher può eseguire il richiamo durante la creazione, la ridenominazione o l'eliminazione del file.

Ma FileSystemWatcher non può dirci il percorso del file di origine.

Per esempio, diciamo che c'è un file F1 nel folder1, e poi copiamo F1 in un'altra cartella denominata folder2, il nuovo nome del file è ancora F1. In questo caso il FileSystemWatcher potrebbe dirci che è stato creato un nuovo file in folder2. Ma non può dirci che il nuovo F1 viene copiato da F1 in folder1, mentre questa informazione è ciò di cui abbiamo bisogno.

Qualche idea?

+1

Interessante domanda. – David

+3

Probabilmente avrete bisogno di monitorare entrambe le cartelle di origine e di destinazione, quindi provare ad abbinare i file che spariscono dalla sorgente con i file che appaiono nella destinazione, possibilmente confrontando i loro nomi/dimensioni o persino i checksum. –

+0

Simile a quanto suggerito da @Branko. Se creo una struttura di dati Albero cartella di Cartella1 e Cartella2 all'istante T0, quindi eseguo un movimento di file e quindi creo nuovamente una struttura T1 Nuova Cartella. Ora confronto l'albero della cartella 1 {T0, T1} e Cartella 2 {T0, T2} e fascicolo la differenza. – dekdev

risposta

2

questo perché non esiste un'operazione come "copiare un file", per quanto riguarda il file system è interessato.

Quando si esegue un comando di copia di file, in realtà apre il vecchio file, crea il nuovo file, legge il contenuto in memoria, scrive nei nuovi file, quindi chiude entrambi. Tutto il filesystem vede sono scritture; non esiste un sistema di tracciamento dell'inquinamento per determinare che i dati provengano effettivamente da un altro file senza modifiche.

Il passaggio finale, che differenzia normalmente la copia del file dalla scrittura di dati in un file, è che i metadati della destinazione vengono modificati per corrispondere alla sorgente. Ma ancora, il filesystem non sa perché stai cambiando gli attributi o quale file li stai abbinando a due.

Il filesystem ha una particolare consapevolezza del collegamento e dello scollegamento. In questo modo è possibile rilevare il movimento, che consiste in "Crea un secondo link al contenuto, rimuovi il primo link". Se la copia è stata implementata come "crea un nuovo collegamento contrassegnato per copy-on-write", è possibile scoprirlo, ma copy-on-write non è una funzionalità di file system molto popolare.

0

il problema è: non è stato attivato un evento di copia per la cartella "f1".

cosa fa scattare il file per la cartella 1: aggiornamento di un file, copia di un file da un'altra directory a "f1" o eliminazione di un file.

si può provare a utilizzare due file in "f1" .. allo stesso tempo si copia il file su "f2" è possibile aggiornare il secondo file, innescando così il gestore di eventi di aggiornamento ......... .

speranza che questo aiuta ....

Problemi correlati