我有代码来获取驱动器号。我的系统中的代码很好,但它在虚拟机(VMWare)中不起作用:
std::vector<TCHAR*> DrivesName = { _T("A:\\"), _T("B:\\"), _T("C:\\"), _T("D:\\"), _T("E:\\"),
_T("F:\\"), _T("G:\\"), _T("H:\\"), _T("I:\\"), _T("J:\\"),
_T("K:\\"), _T("L:\\"), _T("M:\\"), _T("N:\\"), _T("O:\\"),
_T("P:\\"), _T("Q:\\"), _T("R:\\"), _T("S:\\"), _T("T:\\"),
_T("U:\\"), _T("V:\\"), _T("W:\\"), _T("X:\\"), _T("Y:\\"), _T("Z:\\") };
DWORD drivesBitmask = GetLogicalDrives();
if (drivesBitmask == 0)
{
std::cout << "ERROR";
}
for (int i = 0; i < 26; i++)
{
if ((drivesBitmask & 1) == 0)
{
if (typeDriver != DRIVE_NO_ROOT_DIR)
{
std::cout << "Drive: " << DrivesName[i] << std::endl;
}
}
}
我将(drivesBitmask&amp; 1)== 0条件改为(drivesBitmask&amp; 2)== 0它有效,但我不明白....
有什么不同?
答案 0 :(得分:4)
您未正确测试,因此根据A
驱动器是否存在,最终将所有驱动器打印为已存在(并且测试已反转,因此它仅当A
不存在时才会打印;我猜测您的系统之间存在差异。
要修复,请更改测试以使用i
按顺序测试每个位,而不是反复测试相同的位,并避免反转测试(由于与0
比较而不是检查非 - 零值),改变:
if ((drivesBitmask & 1) == 0)
为:
if (drivesBitmask & (1 << i))