gpt4 book ai didi

c - GetLogicalDrives 和位位置 23

转载 作者:行者123 更新时间:2023-11-30 19:07:10 24 4
gpt4 key购买 nike

据我了解,如果我想检查X:\驱动器,如果使用GetLogicalDrives函数,则为第23位;所以,我试图测试它,但如果我将位掩码设置为 >>=23,它就会变成 0

这是我的代码:

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中进行测试,如果未安装,将转到第二个;所以它会显示驱动器未安装。如果我设置 drives>>=1 也是如此,我认为它指的是 B。

仅从 19(字母 T)到 25(字母 Z ),如果它们没有安装。

我做错了什么?

最佳答案

根据文档:

If the function succeeds, the return value is a bitmask representing the currently available disk drives. Bit position 0 (the least-significant bit) is drive A, bit position 1 is drive B, bit position 2 is drive C, and so on.

If the function fails, the return value is zero. To get extended error information, call 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");
}

关于c - GetLogicalDrives 和位位置 23,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47048234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com