2012-05-04 12 views
7

FileSystemWatcher.OnDeletedイベントを使用しているときにファイルを削除する前にアクセスすることはできますか?削除する前にファイルにアクセス

私はドキュメント自体のメタデータにいくつかのデータを保存しています。削除する前にその情報が必要です。

FileSystemWatcherの有無にかかわらずこれを実現する方法はありますか?

アップデート://

私は、ファイルが削除されたとき、私はそれにアクセスすることができないとして、ファイルにデータを格納することは悪いことに気づきました。

ソリューション:ローカルデータベース(sqlite/xmlなど)にデータを保存するようにアプリケーションを書き直してください。ファイルが作成/名前変更/更新/削除されるときに完全なパスと名前が取得されますファイルのデータベースレコードを簡単に更新できます。

アイデアや提案に感謝します。 FileSystemWatcher.OnDeletedイベントを使用している場合

+0

ファイルが削除されるとイベントが発生するため、私はほとんどあなたができないと言いたいと思います。私は、FSWが完了した後でなければ、それが完了するまでイベントを知ることができないと信じています。それは、事前削除でさえも発砲し捕獲する必要があることを意味し、ファイルをロックすることができます。 –

+0

私はそれが 'FileSystemWatcher'だけでは不可能だと思います。私はWindowsが低レベルのフックを許可しているかどうかはわかりません(私は疑いはありますが) – dlev

+0

あなたはイベントハンドラからフルネームを取得します。それを使ってファイルを復元し、目に見えないようにし、読み込み、削除します。ハックではありませんが、まだ何か:http://stackoverflow.com/questions/2837307/recovering-deleted-file-on-windows – nawfal

答えて

2

それが削除される前のファイルにアクセスすることは可能ですか?

このイベントは、以前にファイルを削除した後にトリガーされるため、このイベントが発生したときにファイルにアクセスすることはできません。

どのようにすればいいのでしょうか?

代わりにOnChangedイベントを使用します。このイベントは、ファイルが変更されるたびに発生します。基本的には、ファイルが変更されるたびにファイルメタデータを読み込みます。これは、ファイルが頻繁に更新される場合は面倒ですが、ファイルを削除する前に最新のメタデータを取得する必要があります。

+0

OnChangedは必ずOnDeleteの前に発射する必要はありません! – nawfal

+0

また、ファイルが削除される前に変更されるという保証はありません。 – Aviatrix

+0

@nawfal私のアップデート – 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 
} 
関連する問題