Come posso ottenere l'elenco delle unità logiche (C#) su un sistema, nonché la loro capacità e lo spazio libero?Come ottenere un elenco di unità logiche
risposta
È possibile recuperare queste informazioni con Windows Management Instrumentation (WMI)
using System.Management;
ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
// Loop through each object (disk) retrieved by WMI
foreach (ManagementObject moDisk in mosDisks.Get())
{
// Add the HDD to the list (use the Model field as the item's caption)
Console.WriteLine(moDisk["Model"].ToString());
}
Theres maggiori info qui circa l'attributo è possibile interrogare
http://www.geekpedia.com/tutorial233_Getting-Disk-Drive-Information-using-WMI-and-Csharp.html
Impossibile farlo funzionare sul mio computer. System.Management non ha ora la classe ManagementObjectSearcher. Anche l'URL non punta a una pagina Web valida. –
È necessario aggiungere un riferimento per questo. Su Visual Studio, fare clic con il tasto destro del mouse sul progetto, quindi selezionare Aggiungi -> Riferimento. Quindi, cerca "System.Management" e aggiungilo. – Gippeumi
Il loro esempio ha più robusto, ma ecco il punto cruciale di esso
string[] drives = System.IO.Directory.GetLogicalDrives();
foreach (string str in drives)
{
System.Console.WriteLine(str);
}
Si potrebbe anche P/Invoke e chiamare la funzione Win32 (o usarlo se siete in codice non gestito).
Questo ottiene solo un elenco delle unità tuttavia, per informazioni su ciascuna di esse, si desidera utilizzare GetDrives come dimostra Chris Ballance.
foreach (var drive in DriveInfo.GetDrives())
{
double freeSpace = drive.TotalFreeSpace;
double totalSpace = drive.TotalSize;
double percentFree = (freeSpace/totalSpace) * 100;
float num = (float)percentFree;
Console.WriteLine("Drive:{0} With {1} % free", drive.Name, num);
Console.WriteLine("Space Remaining:{0}", drive.AvailableFreeSpace);
Console.WriteLine("Percent Free Space:{0}", percentFree);
Console.WriteLine("Space used:{0}", drive.TotalSize);
Console.WriteLine("Type: {0}", drive.DriveType);
}
forse questo è ciò che si vuole:
listBox1.Items.Clear();
foreach (DriveInfo f in DriveInfo.GetDrives())
listBox1.Items.Add(f);
Si potrebbe anche voler controllare la proprietà IsReady –
Questo è un meraviglioso pezzo di codice.
ObjectQuery query =
new ObjectQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType=3"); // Create query to select all the hdd's
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(scope, query); // run the query
ManagementObjectCollection queryCollection = searcher.Get(); // get the results
string sVolumeLabel = "";
string[,] saReturn = new string[queryCollection.Count, 7];
int i = 0; // counter for foreach
foreach (ManagementObject m in queryCollection)
{
if (string.IsNullOrEmpty(Convert.ToString(m["VolumeName"]))) { sVolumeLabel = "Local Disk"; } else { sVolumeLabel = Convert.ToString(m["VolumeName"]); } // Disk Label
string sSystemName = Convert.ToString(m["SystemName"]); // Name of computer
string sDriveLetter = Convert.ToString(m["Name"]); // Drive Letter
decimal dSize = Math.Round((Convert.ToDecimal(m["Size"])/1073741824), 2); //HDD Size in Gb
decimal dFree = Math.Round((Convert.ToDecimal(m["FreeSpace"])/1073741824), 2); // Free Space in Gb
decimal dUsed = dSize - dFree; // Used HDD Space in Gb
int iPercent = Convert.ToInt32((dFree/dSize) * 100); // Percentage of free space
saReturn[i,0] = sSystemName;
saReturn[i,1] = sDriveLetter;
saReturn[i,2] = sVolumeLabel;
saReturn[i,3] = Convert.ToString(dSize);
saReturn[i,4] = Convert.ToString(dUsed);
saReturn[i,5] = Convert.ToString(dFree);
saReturn[i,6] = Convert.ToString(iPercent);
i++; // increase counter. This will add the above details for the next drive.
}
- 1. Come ottenere la larghezza di una stringa in pixel (/ unità logiche)?
- 2. iPhone - Recupero delle risorse per i test delle unità logiche
- 3. Come ottenere un elenco di viste MySQL?
- 4. Utilizzo di C# per ottenere un elenco di ACL per server e unità mappate
- 5. ordine di test unità di articoli in un elenco
- 6. Come ottenere un elenco distinto da un elenco personalizzato?
- 7. Logiche in Prolog
- 8. Ottenere il modello di unità dalla lettera di unità
- 9. Come ottenere un elenco secondario in C#
- 10. C# - Valuta le formule logiche di Excel
- 11. Come ottenere un elenco di proprietà con un determinato attributo?
- 12. Ottenere un elenco di tutte le applicazioni
- 13. Ottenere un elenco di allegati dall'oggetto Swift_Message
- 14. Ottenere un elenco di variabili #define
- 15. Come ottenere un elenco di nomi di colonne
- 16. Come ottenere un elenco di sessioni di Windows?
- 17. Ottenere un elenco di valori distinti nell'elenco
- 18. ottenere un elenco di percorsi definiti Zend
- 19. Windows: come ottenere un elenco di tutte le finestre visibili?
- 20. Come ottenere un elenco di elementi con Watin?
- 21. Come ottenere un elenco di categoria da Magento?
- 22. Come ottenere un elenco di lettori multimediali installati
- 23. Come ottenere un elenco di lavori Jenkins utilizzando l'API XML
- 24. Come posso ottenere le permutazioni di un elenco?
- 25. Come ottenere un elenco di fusi orari nel rubino?
- 26. Come ottenere un elenco di ruoli per l'utente attualmente connesso
- 27. Come ottenere un elenco dei provider di rete disponibili?
- 28. Come posso ottenere un elenco di chiavi indicizzate in Titan?
- 29. KVO - Come ottenere un elenco di osservatori registrati
- 30. Come ottenere un elenco di funzioni Powershell personalizzate?
È qualcosa di nuovo che è stato aggiunto nell'ultima versione di .NET. Ho scritto una piccola app da mostrare anni fa, ma al momento dovevo seguire la rotta WMI. Molto utile sapere in ogni caso ... evviva –
Perfetto ... grazie – PaulB
Sguardo rapido su MSDN: è stato aggiunto in .NET 2.0. – Richard