我有一个带有卷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"];
}
答案 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);
}
}