Domanda

Usando un'idea dell'idea di Bob King ho scritto il seguente metodo.

Funziona alla grande su CD, unità rimovibili, unità normali.

Tuttavia per un floppy restituisce sempre "Non disponibile". Qualche idea?

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();
        }
    }
}
È stato utile?

Soluzione

Mi dispiace non avere una risposta migliore, ma ero solito fare la stessa cosa (usare ManagementObjectSearcher) e ho scoperto che ogni volta che il codice eseguiva l'unità floppy faceva una sorta di sequenza seek / init.

Quindi invece sono passato al sotto e interate:

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

Voglio dire che questo è un bug noto in WMI ma sfortunatamente i commenti sul codice non lasciano alcun suggerimento :(

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top