USB ドライブにレコード ファイル アクティビティを作成する必要があります。
これまでにできること:
ManagementEventWatcher を使用して、USB メモリの挿入と抽出 (メモリが取り外された後の抽出を検出) を検出します。
using System.Management; var insertQuery = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2"); var insertWatcher = new ManagementEventWatcher(insertQuery); insertWatcher.EventArrived += DeviceInsertedEvent; insertWatcher.Start();
I を使用する
FileSystemWatcher
と、すべてのアクションを記録できます。作成、変更、削除、名前変更されたファイル:FileSystemWatcher m_Watcher = new FileSystemWatcher(); m_Watcher.Path = e.PathDevice + "\\"; string strFilter = "*.*"; m_Watcher.Filter = strFilter; m_Watcher.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.FileName; m_Watcher.IncludeSubdirectories = true; m_Watcher.Created += new FileSystemEventHandler(OnCreated); m_Watcher.EnableRaisingEvents = true;
問題:
FileSystemWatcher がユニットを監視しているため、ユニットを安全に取り出そうとすると、アプリケーションのプロセスがユニットを使用しているため、ユニットを取り出せないと通知されます。この変数を true に設定EnableRaisingEvents = true;
すると、イベントがメモリ内の変更をリッスンできるようになり、メモリを安全に削除することができなくなります。テストを行ってアプリケーションを起動し、それを false に設定するとEnableRaisingEvents = false;
削除できますメモリを安全に。
考えられる解決策:
オペレーティング システムがデバイスを削除する前に、デバイスの削除を検出するにはどうすればよいですか? このようにして、デバイスでの FileSystemWatcher の使用を停止し、USB デバイスを安全に取り外すことができます。