Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

C# Как получить букву только что подключённой флешки?

#c_sharp #net


Копал в сторону DriveInfo, но сравнивать два массива — не слишком изящное решение.
    


Ответы

Ответ 1



Можно использовать технологию WMI. Подключаете к проекту сборку System.Management.dll. Пишете следующий код: using System.Management; var watcher = new ManagementEventWatcher(); var query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2"); watcher.Query = query; watcher.EventArrived += Watcher_EventArrived; watcher.Query = query; watcher.Start(); private static void Watcher_EventArrived(object sender, EventArrivedEventArgs e) { var driveName = e.NewEvent.Properties["DriveName"].Value.ToString(); Console.WriteLine(driveName); } В событии получаем букву диска. Объект ManagementEventWatcher является Disposable, поэтому крайне желательно после окончания работы с ним освободить ресурсы вызовом метода Dispose (или используйте using, если возможно). Подробнее можно посмотреть здесь.

Ответ 2



Могу предложить слушать оповещения от Windows - WM_DEVICECHANGE. Система присылает уведомления об изменении конфигурации аппаратуры среди устройств. Конкретно Вам будут полезны: DBT_DEVICEARRIVAL - отправляется после вставки устройства или носителя. Программа получит это сообщение, когда устройство будет готово к использованию. DBT_DEVICEQUERYREMOVE - отправляется, когда система запрашивает разрешение на удаление устройства или носителя. Любое приложение может отклонить этот запрос и отменить удаление. DBT_DEVICEREMOVECOMPLETE - отправляется после того, как устройство было удалено. Когда ваша программа получает это событие, устройство больше не доступно. Пример проекта на этом принципе: https://www.codeproject.com/Articles/18062/Detecting-USB-Drive-Removal-in-a-C-Program Подробнее о WM_DEVICECHANGE: https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa363480(v=vs.85).aspx

Комментариев нет:

Отправить комментарий