如何使用C/C++在Windows计算机上获取所有物理驱动器路径(\\.\ PhysicalDriveX)?
此问题的答案建议获取逻辑驱动器号,然后获取与该已安装驱动器对应的物理驱动器.问题是,我想让所有 物理驱动器连接到计算机,包括未安装的驱动器.
其他答案建议从0-15增加一个值并检查是否存在驱动器(\\.\ PhysicalDrive0,\\.\ PhysicalDrive1,...)或调用WMIC列出所有驱动器.[
由于它们似乎可以起作用,因此它们似乎不是最好的方法.有没有一个简单的函数,例如GetPhysicalDrives只返回std::string包含所有物理驱动器路径的向量?
您可以使用QueryDosDevice。根据描述,您希望它列出诸如C:和的内容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;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我像`devlist |这样运行 grep“ ^ Physical”,它列出了物理驱动器。