GetLogicalDrives
返回一个位掩码并检查它,您需要使用按位运算符。要查看驱动器 A 是否正在使用中:
GetLogicalDrives() & 1 == 1
如果驱动器 A 不可用,GetLogicalDrives() & 1
将让步0
并且条件将失败。
要检查下一个驱动器,您需要使用 2 的下一个倍数,GetLogicalDrives() & 2
等等GetLogicalDrives() & 4
。
您可以使用GetLogicalDriveStrings
,但这会返回与您想要的相反的所有使用的逻辑驱动器。
我会改为建立一个表,并对其进行索引:
const char *drive_names[] =
{
"A:",
"B:",
...
"Z:"
};
那么你的循环可能是:
DWORD drives_bitmask = GetLogicalDrives();
for (DWORD i < 0; i < 32; i++)
{
// Shift 1 to a multiple of 2. 1 << 0 = 1 (0000 0001), 1 << 1 = 2 etc.
DWORD mask_index = 1 << i;
if (drives_bitmask & i == 0)
{
// Drive unavailable, add it to list.
const char *name = drive_names[i];
// ... do GUI work.
}
}