Вопрос

Используя идею Боба Кинга, я написал следующий метод.

Отлично работает на компакт-дисках, съемных дисках, обычных дисках.

Однако для дискеты всегда возвращается «Not Available». Есть идеи?

public static void TestFloppy( char driveLetter ) {
    using( var searcher = new ManagementObjectSearcher(  @"SELECT * FROM Win32_LogicalDisk WHERE DeviceID = '" + driveLetter + ":'" ) )
    using( var logicalDisks = searcher.Get() ) {
        foreach( ManagementObject logicalDisk in logicalDisks ) {  
          var fs = logicalDisk[ "FreeSpace" ];
            Console.WriteLine( "FreeSpace = " + ( fs ?? "Not Available" ) );
            logicalDisk.Dispose();
        }
    }
}
Это было полезно?

Решение

Мне жаль, что у меня нет лучшего ответа, но я обычно делал то же самое (используйте ManagementObjectSearcher) и обнаружил, что каждый раз, когда код запускает дисковод гибких дисков, выполняет какую-то последовательность поиска / инициализации.

Так что вместо этого я перешел на нижеследующее и заинтересовался:

ManagementClass comp = new ManagementClass(scope, new ManagementPath(obj), null);
comp.Get();
objs = comp.GetInstances();

Я хочу сказать, что это известная ошибка в WMI, но, к сожалению, комментарии кода не оставляют никаких намеков: (

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top