我喜歡在所有物理磁盤上看到每個分區/卷(也是隱藏的系統卷)。 卷的信息應包含用c#查看磁盤管理信息 - 含。隱藏卷
- 分區索引(例如 「1」)
- 名稱(如 「C:」),
- 標籤(例如, 「窗口」)
- 能力(例如, 200GB)
在我看來,「WMI」可以是解決此任務的正確選擇。
樣本輸出可以類似於此:
我發現了幾個解決方案在網絡來獲取驅動器號(C :)用的DiskID(Disk0上)相結合。 One of those solution can be found here。
public Dictionary<string, string> GetDrives()
{
var result = new Dictionary<string, string>();
foreach (var drive in new ManagementObjectSearcher("Select * from Win32_LogicalDiskToPartition").Get().Cast<ManagementObject>().ToList())
{
var driveLetter = Regex.Match((string)drive[ "Dependent" ], @"DeviceID=""(.*)""").Groups[ 1 ].Value;
var driveNumber = Regex.Match((string)drive[ "Antecedent" ], @"Disk #(\d*),").Groups[ 1 ].Value;
result.Add(driveLetter, driveNumber);
}
return result;
}
該解決方案的問題在於它忽略了隱藏的分區。輸出字典將只包含4個條目(m,4 - c,1 - d,1 - f,2)。
這是因爲使用「Win32_LogicalDiskToPartition」將「win32_logicalDisk」與「win32_diskpartion」組合在一起。但「win32_logicalDisk」不包含未分配的卷。
我只能在「win32_volume」中找到未分配的卷,但我無法將「win32_volume」與「win32_diskpartition」結合使用。
簡化我的數據類應該是這樣的:
public class Disk
{
public string Diskname; //"Disk0" or "0" or "PHYSICALDRIVE0"
public List<Partition> PartitionList;
}
public class Partition
{
public ushort Index //can be of type string too
public string Letter;
public string Label;
public uint Capacity;
//Example for Windows Partition
// Index = "1" or "Partition1"
// Letter = "c" or "c:"
// Label = "Windows"
// Capacity = "1000202039296"
//
//Example for System-reserved Partition
// Index = "0" or "Partition0"
// Letter = "" or ""
// Label = "System-reserved"
// Capacity = "104853504"
}
也許有人可以幫助:-)