【发布时间】:2012-10-13 02:56:17
【问题描述】:
我正在尝试获取本地计算机上可用的所有物理驱动器。
我尝试使用GetLogicalDrives(),但是当我使用此功能时,它还会让我获得机器上物理上不可用的驱动器,例如软盘驱动器 A。
这是我的代码:
void FindDrives()
{
DWORD drives = GetLogicalDrives();
for (int i=0; i<26; i++)
{
if( ( drives & ( 1 << i ) ) )
{
wchar_t driveName[] = { L'A' + i, L':', L'\\', L'\0'};
std::wcout << driveName << std::endl;
}
}
}
我怎样才能只获得物理上可用的驱动器?
【问题讨论】:
-
请缩小您期望的“物理驱动器”范围。
-
如果你是为了“真正的”物理驱动器(而不是像 A:, B:, C:, ...),这并不像发出一个 API 调用那么简单。可以在这里找到一个可能的解决方案:support.microsoft.com/kb/264203
-
@alk 当我使用有问题的代码时,我得到 a:\ c:\ d:\ 和 e:\,但 a:\ 不是我机器上的软盘。我只会得到 c:\ d:\ 和 e:\
-
这些不一定是物理驱动器。使用
GetDriveType()msdn.microsoft.com/en-us/library/windows/desktop/… 寻求 Joze 的提示 -
如果没有安装
A:驱动器,GetLogicalDrives()将不会返回A:驱动器。如果要检查可移动驱动器中是否有媒体,则必须单独查询驱动器。GetDriveType()可能会告诉您驱动器是否支持可移动媒体,但不会告诉您驱动器中是否有实际媒体。为此,您必须直接询问驱动器,例如使用DeviceIoControl(),或至少使用GetVolumeInformation()或GetDiskFreeSpace/Ex()。