10

我试图在 Windows 中以编程方式找出可用的磁盘空间。为此,我需要首先获取可用驱动器的列表,然后检查其中哪些是本地驱动器,然后查询每个本地驱动器上的可用字节。

我有点卡在第一部分,API 提供了两个功能:

  1. GetLogicalDriveshttp://msdn.microsoft.com/en-us/library/aa364972(VS.85).aspx)它为您提供了一个设置了位的 DWORD(如果存在驱动器 A,则为位 0,如果驱动器 B 等,则为位 1 )
  2. GetLogicalDriveStringshttp://msdn.microsoft.com/en-us/library/aa364975(VS.85).aspx)它为您提供了实际的字符串。

现在,虽然我稍后会使用字符串,但我更喜欢使用第一个选项进行查询。但是,在我的系统上,DWORD 的类型定义为“unsigned long”,即 4 个字节,而驱动器号仅在 AZ 范围内(我认为是 26 个字符)。显然,一个人可以在他们的系统上定义超过 26 个驱动器(尽管他们不太可能这样做) - 所以我想知道这些驱动器是否有任何约定。有人可以指出我的资源吗?

谢谢。

4

3 回答 3

10
  1. DWORD 始终为 4 个字节,与系统无关(它是 Win32 类型)。

  2. Windows 中驱动器号的最大值为26。因为英文字母只有 26 个字母 :)。但是,Windows 允许两种方式来挂载卷:

    • 到驱动器号
    • 到目录(在 NTFS 卷上)。您可以将一个卷安装到多个位置(但不能超过一个驱动器号 IIRC)。此任务的 GUI 由Control Panel -> Administrative Tools -> Computer Management -> Disk Management提供。

如果您想拥有超过 26 个驱动器,并且额外的驱动器被重定向到已经活动的驱动器,并且它们在大多数程序中无法正常工作,那么您可以使用以下方法分配更多驱动器(警告它们甚至不会出现在文件资源管理器中):

subst ♪: C:\Temp\
cd /D ♪:\

并删除它们(它们也不会通过重新启动保留):

subst /D ♪:

您可以枚举所有卷及其安装点,如本文所述

于 2009-12-22T08:49:18.423 回答
1

您可以使用WMI。以下 WMI 查询应列出所有驱动器:

SELECT * FROM Win32_DiskDrive
于 2009-12-22T08:22:59.310 回答
1

枚举 MS-DOS 驱动器是不够的(顺便说一下,最多可以有 26 个,尽管每个驱动器可以绑定两次,一次是全局绑定,一次是在会话中本地绑定),例如,可以挂载一个卷到一个目录。您想要的可能是枚举系统中的所有卷,使用FindFirstVolume等。查看相关的 MSDN示例

于 2009-12-22T08:49:12.877 回答