我有卷ID在其中的一个txt文件。
我需要从驱动器卷ID(Windows)中的驱动器信息(驱动器盘符,驱动器大小等):
卷ID是按以下格式:
\\?\Volume{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
该驱动器可以是移动/本地磁盘
没关系的信息是如何获取的(也可能是脚本,CPP,C#,Java代码)。
编辑:
我试图用DriveInfo,的Win32_LogicalDisk,Win32_Volume,Win32_PnpDevices - 但我找不到这个奇怪的ID ......在所有情况下的ID有differrent格式
更新:
发现了如何做到这一点。
你可以枚举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"];
}
卷大小,等等很容易。 只需使用普通的Win32方法。 接受任何功能"C:"
作为一个驱动器也将接受卷GUID路径 (因为这是一个\\?\Volume{XXX}
正确的称呼)。
“驱动信”是有点麻烦,因为可以是0,1或多个驱动器号。 你需要调用FindFirstVolumeMountPoint / FindNextVolumeMountPoint / FindVolumeMountPointClose
让所有的人。
尝试使用此
System.Management.ManagementObjectSearcher ms =
new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject mo in ms.Get())
{
//Find by ID
}
有关详细信息芦苇这个Win32_DiskDrive类
有此API函数: GetVolumePathNamesForVolumeName
它返回一个空值终止阵列,以允许多个安装点。 如果你只有一个安装点(典型值),那么你就可以作为一个经常空结束的字符串读它。
这是更高效,枚举磁盘/卷,这可能会导致闲置磁盘运转起来。
您可以使用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);
}
}