9

我有一个带有卷 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

4 回答 4

2

试试用这个

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

有关详细信息,请参阅此Win32_DiskDrive 类

于 2012-04-17T06:41:34.783 回答
2

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

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

于 2012-04-17T07:34:14.067 回答
1

有一个 API 函数: GetVolumePathNamesForVolumeName

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

这比枚举磁盘/卷更有效,这可能导致空闲磁盘启动。

于 2015-10-18T23:27:23.760 回答
-4

您可以使用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);
    }
}
于 2012-04-17T06:43:12.867 回答