如何按卷ID获取驱动器信息

时间:2012-04-17 06:33:53

标签: c# c++ drive driveinfo

我有一个带有卷ID的txt文件。

我需要从驱动器卷ID(Windows)获取驱动器信息(驱动器号,驱动器大小等):

卷ID采用以下格式:

\\?\Volume{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}

驱动器可以是可移动/本地磁盘

检索信息的方式无关紧要(可能是脚本,cpp,c#,java代码)。

修改

我尝试使用DriveInfo,Win32_LogicalDisk,Win32_Volume,Win32_PnpDevices - 但我找不到这个奇怪的ID ...在所有情况下,id都有不同的格式

更新

了解如何做到这一点。

你可以像这样枚举Win32_Volume:

ManagementObjectSearcher ms = new ManagementObjectSearcher("Select * from Win32_Volume");    
foreach(ManagementObject mo in ms.Get())   
{
    var guid = mo["DeviceID"].ToString();

    if(guid == myGuid)
        return mo["DriveLetter"];
}

4 个答案:

答案 0 :(得分:2)

尝试使用此

System.Management.ManagementObjectSearcher ms =
new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject mo in ms.Get())
{
    //Find by ID
}

详情请参阅此Win32_DiskDrive class

答案 1 :(得分:2)

卷大小等等很容易。只需使用常规的Win32方法即可。任何接受"C:"作为驱动器的函数也会接受卷GUID路径(因为这是\\?\Volume{XXX}被正确调用的内容。

“驱动器号”有点棘手,因为可能有0个,1个或更多驱动器号。您需要致电FindFirstVolumeMountPoint / FindNextVolumeMountPoint / FindVolumeMountPointClose以获取所有这些内容。

答案 2 :(得分:1)

这有一个API函数: GetVolumePathNamesForVolumeName

它返回一个以null结尾的数组,以允许多个挂载点。如果只有一个挂载点(典型值),则可以将其作为常规的空终止字符串读取。

枚举磁盘/卷的效率更高,这可能会导致空闲磁盘启动。

答案 3 :(得分:-2)

您可以使用DriveInfo.GetDrives Method获取驱动器信息。以下是MSDN的示例代码

DriveInfo[] allDrives = DriveInfo.GetDrives();

foreach (DriveInfo d in allDrives)
{
    Console.WriteLine("Drive {0}", d.Name);
    Console.WriteLine("  File type: {0}", d.DriveType);
    if (d.IsReady == true)
    {
        Console.WriteLine("  Volume label: {0}", d.VolumeLabel);
        Console.WriteLine("  File system: {0}", d.DriveFormat);
        Console.WriteLine(
            "  Available space to current user:{0, 15} bytes", 
            d.AvailableFreeSpace);

        Console.WriteLine(
            "  Total available space:          {0, 15} bytes",
            d.TotalFreeSpace);

        Console.WriteLine(
            "  Total size of drive:            {0, 15} bytes ",
            d.TotalSize);
    }
}