Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GetLogicalDrives-代码在本地工作,但不在虚拟机中工作_C++_Winapi - Fatal编程技术网

C++ GetLogicalDrives-代码在本地工作,但不在虚拟机中工作

C++ GetLogicalDrives-代码在本地工作,但不在虚拟机中工作,c++,winapi,C++,Winapi,我有获取驱动器号的代码。我的系统中的这段代码很好,但在虚拟机(VMWare)中不起作用: std::vector DrivesName={uT(“A:\\”)、\uT(“B:\\”)、\uT(“C:\\”)、\uT(“D:\\”)、\uT(“E:\\”), _T(“F:\\”)、“G:\\”、“H:\\”、“I:\\”、“J:\\”, _T(“K:\\”)、“L:\\”、“M:\\”、“N:\\”、“O:\\”, _T(“P:\\”)、U T(“Q:\\”)、U T(“R:\\”)、U T(“S

我有获取驱动器号的代码。我的系统中的这段代码很好,但在虚拟机(VMWare)中不起作用:

std::vector DrivesName={uT(“A:\\”)、\uT(“B:\\”)、\uT(“C:\\”)、\uT(“D:\\”)、\uT(“E:\\”),
_T(“F:\\”)、“G:\\”、“H:\\”、“I:\\”、“J:\\”,
_T(“K:\\”)、“L:\\”、“M:\\”、“N:\\”、“O:\\”,
_T(“P:\\”)、U T(“Q:\\”)、U T(“R:\\”)、U T(“S:\\”)、U T(“T:\\”),
_T(“U:\\”)、“V:\\”、“W:\\”、“X:\\”、“Y:\\”、“Z:\\”;
DWORD drivesBitmask=GetLogicalDrives();
如果(驱动器号为==0)
{

std::cout您没有正确测试,因此您最终会根据
A
驱动器是否存在打印所有驱动器(测试是反向的,因此只有
A
不存在时才会打印;我猜这就是您的系统之间的区别)

要修复此问题,请将测试更改为使用
i
按顺序测试每个位,而不是反复测试相同的位,并避免反转测试(由于比较
0
而不是检查非零值),更改:

if ((drivesBitmask & 1) == 0)
致:


if(drivesBitmask&1您的检查
if((drivesBitmask&1)==0)
不依赖于
i
(除了毫无意义之外)…它怎么可能是正确的?阅读您的代码并思考一下。if语句中的表达式在for循环的每次迭代中都具有相同的值。该表达式测试您的机器是否有A驱动器。您需要测试
(1)(顺便提一下,
DrivesName
vector使小猫哭泣)此外,那些
DriveNames
既不是驱动器名也不是卷名。它们是目录名。您可以去掉
DrivesName
,只需使用
…或在for循环的底部添加一个
drivesBitmask>=1;
if ((drivesBitmask & 1) == 0)
if (drivesBitmask & (1 << i))