2012-01-06 17 views
6

Sto cercando di tenere traccia dei file copiati dagli utenti e da altre applicazioni. FileSystemWatch ha solo eventi per Changed, Created, Deleted, Disposed, Error e Renamed. Non attiva un evento quando si accede a un file dalla funzione di copia o in cui viene copiato il nuovo file.C# Traccia file copiati

Esiste un metodo per monitorare l'evento/funzione di copia di Windows?

+0

Puoi invece guardare l'istanza degli appunti? Solo un pensiero. http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx –

+0

Quanto bene si può tollerare il mancato tracciamento di una copia? Probabilmente è possibile rintracciare le _most_ copie (ad es. Quelle eseguite tramite Explorer), ma alcune scorreranno. –

+0

Perché stai provando a fare questo? – RQDQ

risposta

4

Non so in alcun modo usare C#.

È possibile farlo se si è disposti a scrivere un File System Filter Driver. [Territorio Sicuramente esperto, in quanto non v'è spazio per corrompere i file e/o abbattere il sistema] intercetta driver di filtro

Un file system richieste rivolte a un sistema di file o un altro driver di filtro del file system. Intercettando la richiesta prima che raggiunga la destinazione desiderata, il driver del filtro può estendere o sostituire la funzionalità fornita dalla destinazione originale della richiesta o dalla richiesta originale della richiesta . Esempi di driver di filtro del file system includono i filtri anti-virus , gli agenti di backup e i prodotti di crittografia. Per sviluppare i file e i driver di filtro del file system, utilizzare il kit IFS (Installable File System), fornito con Windows Driver Kit (WDK).

+1

Il driver del filtro può tracciare operazioni di lettura e scrittura separate ma non può stabilire il collegamento tra due. Non è possibile identificare la copia in modo definito. –

1

Stai facendo la cosa giusta con FileSystemWatcher. Windows non ha alcun meccanismo incorporato per la segnalazione affidabile delle copie.

È possibile agganciare la routine di copia del sistema operativo, ma ciò non garantisce risultati ottimali: le applicazioni sono libere di implementare la propria copia semplicemente aprendo i file di origine e destinazione e copiando i byte.

La ridenominazione è diversa perché una rinomina eseguita dal sistema operativo non può essere facilmente imitata con altri mezzi, quindi si prenderanno tutti i nomi con lo FileSystemWatcher. Tieni presente che lo spostamento tra le unità è più simile alla copia: non riceverai una notifica rinominata, ma una Creata e una Eliminata.

Quindi, se davvero ha realmente bisogno di notare un file sempre copiato, il mio approccio suggerito è questo:

  • Hook le CloseFile chiamate, oltre al FileSystemWatcher.
  • Ogni volta che un file viene chiuso, potrebbe essere perché è la fonte o la destinazione di una mossa copia/cross-drive. Controlla la sua dimensione.
  • Se si trovano due file chiusi con le stesse dimensioni entro un periodo di tempo ragionevolmente breve, confrontare il contenuto. Ad alta intensità di risorse, ma l'unico modo affidabile per farlo.
0

È possibile utilizzare Auditing file and folder access funzionalità di Windows che scrive una voce del registro eventi e si può programmi di installazione per iniziare quando si verifica un evento del genere

0

non riesco a pensare a un buon modo.

Per ogni file appena creato, è necessario verificare se esiste un duplicato esatto (magari con un nome diverso) in qualsiasi punto del file system. Ovviamente potresti fare questa forza bruta, ma la soluzione sarebbe molto inelegante, lenta e fragile!

Problemi correlati