2012-05-04 8 views
7

E 'possibile accedere a un file prima che venga cancellato quando si usa l'evento FileSystemWatcher.OnDeleted?Accedere al file prima che sia cancellato

Sto memorizzando alcuni dati sul documento stesso nei suoi metadati e ho bisogno di quelle informazioni prima che vengano cancellate.

Qualsiasi idea su come eseguire questa operazione con o senza FileSystemWatcher se è possibile?

Update: //

mi sono reso conto che la memorizzazione dei dati nel file è male come non posso accedervi quando il file viene eliminato.

Soluzione: riscrivere la mia applicazione per memorizzare i dati in un database locale (SQLite/XML o qualcosa di simile) come ottengo il percorso completo e il nome quando viene creato il file/rinominato/aggiornati/cancellati sarebbe essere più semplice per aggiornare il record del database per il file.

Grazie a tutti per le idee e i suggerimenti!

+0

Voglio quasi dire no, non è possibile perché l'evento si attiva dopo che il file è stato cancellato. Non credo che la FSW possa conoscere l'evento fino a quando non sarà completato, dal momento che ciò significherebbe che una pre-eliminazione dovrebbe anche essere sparata e catturata, e quindi consentire di creare un blocco sul file. –

+0

Non penso sia possibile solo con 'FileSystemWatcher'. Non sono sicuro che Windows consenta un hook di livello inferiore (anche se ne dubito). – dlev

+0

Otterrai il nome completo dal gestore di eventi. Usalo per ripristinare il file, renderlo invisibile, leggerlo ed eliminarlo. hackish e non infallibile, ma ancora qualcosa: http://stackoverflow.com/questions/2837307/recovering-deleted-file-on-windows – nawfal

risposta

2

È possibile accedere a un file prima che venga eliminato quando si utilizza l'evento FileSystemWatcher.OnDeleted?

L'evento viene attivato dopo la cancellazione del file non prima, quindi non sarà possibile accedere al file quando questo evento viene generato.

Qualche idea come realizzare questo se è possibile?

Vorrei utilizzare invece l'evento OnChanged, che viene attivato ogni volta che il file cambia. Fondamentalmente, si leggono i metadati del file ogni volta che il file cambia. Questo può essere un po 'macchinoso se il file viene aggiornato molto spesso ma dovrebbe consentire di avere gli ultimi metadati prima che il file venga rimosso.

+0

OnChanged non deve necessariamente sparare prima di OnDelete! – nawfal

+0

inoltre non vi è alcuna garanzia che il file venga modificato prima di essere eliminato. – Aviatrix

+0

@nawfal Si prega di consultare il mio aggiornamento – GETah

0
FileSystemWatcher1 = Your Main Watcher. 
FileSystemWatcher2 = RecycleBin Watcher 

If the FileSystemWatcher1 Deleted file == the FileSystemWatcher2 Created File 
{ 
    //Do what you want with the FileSystemWatcher2.FullPath 
}