据我了解,如果我想检查 X:\ 驱动器,如果使用GetLogicalDrives
功能,则为23位;所以,我试图测试一下,但如果我将位掩码设置为0
,它会变为>>=23
。
这是我的代码:
DWORD drives;
drives = GetLogicalDrives();
drives >>= 23;
if (drives == 0)
{
wprintf(L"Error: %lu\n", GetLastError());
}
else if (drives & 1)
{
wprintf(L"Drive is mounted\n");
}
else
{
wprintf(L"Drive is not mounted\n");
}
修改
现在,如果我将drives
设置为17
,我相信它会引用字母R
,它将在第一个else
中进行测试,并且如果没有安装,将转到第二个;所以它会显示Drive is not mounted
。如果我设置drives>>=1
,它就是B,我认为是相同的。
仅0
19
(T
}至25
(字母Z
),如果未加载{{1}},它将获得{{1}}。
我做错了什么?
先谢谢。
答案 0 :(得分:1)
根据文件:
如果函数成功,则返回值是表示当前可用磁盘驱动器的位掩码。位位置0(最低有效位)是驱动器A,位位置1是驱动器B,位位置2是驱动器C,依此类推。
如果函数失败,则返回值为零。要获取扩展错误信息,请致电
GetLastError
。
如果函数成功并且位掩码在X之后不包含驱动器的任何位,则移位的结果将为0,从而导致代码报告错误错误。您需要在GetLogicalDrives()
返回后立即检查0 ,然后再转移:
DWORD drives = GetLogicalDrives();
if (drives == 0)
{
wprintf(L"Error: %lu\n", GetLastError());
}
else
{
drives >>= 23;
if (drives & 1)
wprintf(L"Drive is mounted\n");
else
wprintf(L"Drive is not mounted\n");
}
话虽如此,你根本不需要移动位掩码本身:
DWORD drives = GetLogicalDrives();
if (drives == 0)
{
wprintf(L"Error: %lu\n", GetLastError());
}
else
{
//if (drives & 0x800000)
if (drives & (1<<23))
wprintf(L"Drive is mounted\n");
else
wprintf(L"Drive is not mounted\n");
}