0

USB ドライブにレコード ファイル アクティビティを作成する必要があります。

これまでにできること:

  1. 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();
    
  2. 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 デバイスを安全に取り外すことができます。

4

1 に答える 1