从驱动器号获取驱动器型号

fak*_*eta 7 c#

我想从驱动器号中获取型号名称.例如Crucial_CT256MX100SSD1我的驱动器的型号C:\

可以使用简单的WMI查询检索模型,

var hdd = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Index = '0'")
    .Get()
    .Cast<ManagementObject>()
    .First();
MessageBox.Show(hdd["Model"].ToString());
Run Code Online (Sandbox Code Playgroud)

但是,我无法使用驱动器号过滤查询.

不幸的Win32_LogicalDisk是没有驱动器的型号.

我没有更多的想法.

Ice*_*ind 12

我给你写了一个应该做你需要的功能:

class Program
{
    static void Main(string[] args)
    {
        const string drive = "C:";

        Console.WriteLine("Drive {0}'s Model Number is {1}", drive, GetModelFromDrive(drive));
    }

    public static string GetModelFromDrive(string driveLetter)
    {
        // Must be 2 characters long.
        // Function expects "C:" or "D:" etc...
        if (driveLetter.Length != 2)
            return "";

        try
        {
            using (var partitions = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" + driveLetter +
                                             "'} WHERE ResultClass=Win32_DiskPartition"))
            {
                foreach (var partition in partitions.Get())
                {
                    using ( var drives = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" +
                                                         partition["DeviceID"] +
                                                         "'} WHERE ResultClass=Win32_DiskDrive"))
                    {
                        foreach (var drive in drives.Get())
                        {
                            return (string) drive["Model"];
                        }
                    }
                }
            }
        }
        catch
        {
            return "<unknown>";
        }

        // Not Found
        return "<unknown>";
    }
}
Run Code Online (Sandbox Code Playgroud)

只需传入一个字符串,例如C:D:.它必须只是驱动器号和冒号.此外,我为硬盘驱动器做了这项工作.它不适用于CD-ROM驱动器.如果您需要该功能,它可以扩展.