使用c#查看磁盘管理信息

时间:2014-01-23 23:07:24

标签: c# volume disk hard-drive

当我打开Disk Management(右键点击我的电脑 - >管理)时,我看到: enter image description here

我怎么知道路径F:\属于Disk5?换句话说,我想知道C#可用的磁盘。

我之所以需要知道这是因为我有一个加密的usb mas存储设备,我需要将参数\Device\Harddisk5与密码一起传递给TrueCrypt以便安装带代码的加密设备。

修改

我知道如何查看驱动器信息。我只是不知道如何知道Drive 1属于磁盘0。换句话说,我无法搞清楚磁盘编号。我希望实施:

public string GetDiskNumber(char letter)
{
   // implenetation
   return Disk5;
}

我将其称为:

GetDiskNumber('F');

2 个答案:

答案 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;
        }