如何使用 C/C++ 获取 Windows 计算机上的所有物理驱动器路径 (\\.\PhysicalDriveX)?
答案在this https://stackoverflow.com/questions/327718/how-to-list-physical-disks问题建议获取逻辑驱动器号,然后获取与该已安装驱动器对应的物理驱动器。问题是,我想得到all连接到计算机的物理驱动器,包括未安装的驱动器。
其他答案建议增加 0-15 之间的值并检查驱动器是否存在(\\.\PhysicalDrive0、\\.\PhysicalDrive1、...)或调用 WMIC 列出所有驱动器。[
虽然这些看起来可行,但它们似乎并不是最好的方法。难道没有一个简单的函数,例如GetPhysicalDrives
它只是返回一个向量std::string
包含所有物理驱动器的路径?
您可以使用QueryDosDevice
。根据描述,您可能会期望它列出类似的内容C:
and D:
,但它也会列出诸如PhysicalDrive0
, PhysicalDrive1
等等。
主要缺点是它还会列出许多您可能不关心的其他设备名称,因此(例如)在我的机器上,我得到了近 600 个设备名称的列表,其中只有相当小的百分比是与你关心的事情有关。
以防万一您关心,一些(旧的)示例代码:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <iostream>
int main(int argc, char **argv) {
char physical[65536];
char logical[65536];
if ( argc > 1) {
for (int i=1; i<argc; i++) {
QueryDosDevice(argv[i],logical, sizeof(logical));
std::cout << argv[i] << " : \t" << logical << std::endl << std::endl;
}
return 0;
}
QueryDosDevice(NULL, physical, sizeof(physical));
std::cout << "devices: " << std::endl;
for (char *pos = physical; *pos; pos+=strlen(pos)+1) {
QueryDosDevice(pos, logical, sizeof(logical));
std::cout << pos << " : \t" << logical << std::endl << std::endl;
}
return 0;
}
但是,如果我像 `devlist | 一样运行它grep "^Physical",它列出了物理驱动器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)