Получите локальные диски, не нажимая дискету - PullRequest
2 голосов
/ 13 декабря 2011

Я ищу способ сканирования жестких дисков, не облагаясь «налогом с дискет» системы, пытающейся прочитать дискету, чтобы узнать, есть ли там диск.

Важно: я знаю, как использовать DriveInfo.GetDrives, чтобы получить только жесткие диски, но это включает фильтрацию после списка, который был создан.Я хочу сделать фильтр до , если это возможно.

Ответы [ 3 ]

2 голосов
/ 13 декабря 2011

Вы можете попробовать это:

ConnectionOptions opts = new ConnectionOptions();
ManagementScope scope = new ManagementScope(@"\\.\root\cimv2", opts);
SelectQuery diskQuery = new SelectQuery("SELECT * FROM Win32_LogicalDisk WHERE (MediaType != 0 AND MediaType = 11 OR MediaType = 12)");

ManagementObjectSearcher searcher = new ManagementObjectSearcher(diskQuery);
ManagementObjectCollection diskObjColl = searcher.Get();

Типы носителей 11 и 12 не являются гибкими. Вы можете найти полную документацию здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173%28v=vs.85%29.aspx

1 голос
/ 03 апреля 2016

CD-дисковод и дисковод гибких дисков не готовы, поэтому вы можете попробовать это:

foreach (var dr in DriveInfo.GetDrives())
{
    if (dr.IsReady == true)
    {
        Console.WriteLine(string.Format("name : {0}   type : {1}", dr, dr.DriveType));
    }
}
1 голос
/ 13 декабря 2011

Не как таковой ... Информация о диске просто не имеет функций для фильтрации или исключения любых типов дисков во время вызова getDrives.

Но, возможно, есть другой способ. (Это не проверено, но, возможно, идея:) Если вы просто ищете доступность определенных дисков, вы можете создать экземпляр класса DriveInfo с именем конкретного диска и посмотреть, работает ли он?

...