当我打开Disk Management
(右键点击我的电脑 - >管理)时,我看到:
我怎么知道路径F:\
属于Disk5?换句话说,我想知道C#可用的磁盘。
我之所以需要知道这是因为我有一个加密的usb mas存储设备,我需要将参数\Device\Harddisk5
与密码一起传递给TrueCrypt以便安装带代码的加密设备。
我知道如何查看驱动器信息。我只是不知道如何知道Drive 1属于磁盘0。换句话说,我无法搞清楚磁盘编号。我希望实施:
public string GetDiskNumber(char letter)
{
// implenetation
return Disk5;
}
我将其称为:
GetDiskNumber('F');
答案 0 :(得分:4)
您可以使用WMI检索该信息
System.Management.ManagementObject("Win32_LogicalDisk.DeviceID=" & DriveLetter & ":")
在Win32_LogicalDisk class查看更多内容我希望它有所帮助。顺便提一下PInvoke GetVolumeInformation。
如果你需要'PHYSICALDRIVE0',你应该使用Win32_PhysicalMedia class,并且Win32_DiskDrivePhysicalMedia类粘合两者。
您需要在C#
中的例子public string GetDiskNumber(string letter)
{
var ret = "0";
var scope = new ManagementScope("\\\\.\\ROOT\\cimv2");
var query = new ObjectQuery("Associators of {Win32_LogicalDisk.DeviceID='" + letter + ":'} WHERE ResultRole=Antecedent");
var searcher = new ManagementObjectSearcher(scope, query);
var queryCollection = searcher.Get();
foreach (ManagementObject m in queryCollection)
{
ret = m["Name"].ToString().Replace("Disk #", "")[0].ToString();
}
return ret;
}
答案 1 :(得分:1)
已经为你获得了一个方法,你可以在字典中获得驱动器号及其编号;
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;
}