【问题标题】:Get available physical drives on local machine在本地机器上获取可用的物理驱动器
【发布时间】: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()

标签: c++ c winapi


【解决方案1】:

尝试使用wmic

wmic diskdrive list

了解较少

wmic diskdrive list brief 

或者在 c 中,首先使用 GetLogicalDrives() 来获取系统中映射的所有驱动器,然后使用 GetDriveType() 来找出每个驱动器是哪种类型的驱动器。然后按照你的意愿进行排序。

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多