如何使用C / C ++在Windows计算机上获取所有物理驱动器路径(\\。\ PhysicalDriveX)?
this问题中的答案建议获取逻辑驱动器号,然后获取与该已安装驱动器对应的物理驱动器。问题是,我想要所有 连接到计算机的物理驱动器,包括未安装的驱动器。
其他答案建议从0-15增加一个值并检查是否存在驱动器(\\。\ PhysicalDrive0,\\。\ PhysicalDrive1,...)或调用WMIC列出所有驱动器。[
由于这些似乎会起作用,因此看起来它们并不是最好的方法。是否有一个简单的函数,如GetPhysicalDrives
只返回包含所有物理驱动器路径的std::string
向量?
答案 0 :(得分:4)
您可以使用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;
}
但是,如果我像`devlist |那样运行它grep“^ Physical”,它列出了物理驱动器。
答案 1 :(得分:0)
是的,您只需输入NET USE
。这是示例输出...
NET USE
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
H: \\romaxtechnology.com\HomeDrive\Users\Henry.Tanner
Microsoft Windows Network
OK N: \\ukfs01.romaxtechnology.com\romaxfs
Microsoft Windows Network
OK X: \\ukfs03.romaxtechnology.com\exchange
Microsoft Windows Network
OK Z: \\ukfs07\Engineering Microsoft Windows Network
\\romaxtechnology.com\HomeDrive
Microsoft Windows Network
OK \\ukfs07\IPC$ Microsoft Windows Network
The command completed successfully.