Максимальное количество дисков в Windows? - PullRequest
11 голосов
/ 22 декабря 2009

Я пытаюсь вычислить доступное дисковое пространство программно в Windows. Для этого мне нужно сначала получить список доступных дисков, затем проверить, какие из них являются локальными дисками, а затем запросить доступные байты на каждом локальном диске.

Я немного застрял в первой части, где API представляет две функции:

  1. GetLogicalDrives (http://msdn.microsoft.com/en-us/library/aa364972(VS.85).aspx), который дает DWORD с установленными битами (бит 0, если диск A присутствует, бит 1, если диск B и т. Д.)
  2. GetLogicalDriveStrings (http://msdn.microsoft.com/en-us/library/aa364975(VS.85).aspx), что дает вам фактические строки.

Теперь, хотя позже я буду использовать строки, я бы предпочел использовать первую опцию для запросов. Тем не менее, в моей системе тип DWORD определен как «unsigned long», что составляет 4 байта, тогда как буквы дисков только в диапазоне A-Z (я думаю, 26 символов). Очевидно, что в их системе можно определить более 26 накопителей (хотя вряд ли они это сделают), поэтому мне было интересно, существует ли какое-либо соглашение для этих накопителей. Может кто-нибудь указать мне ресурс по этому вопросу?

Спасибо.

Ответы [ 3 ]

10 голосов
/ 22 декабря 2009
  1. DWORD всегда 4 байта, независимо от системы (это тип Win32).

  2. Максимальное количество букв дисков в Windows равно 26. Потому что в английском алфавите всего 26 букв :). Однако Windows позволяет подключить том двумя способами:

    • к букве диска
    • в каталог (на томе NTFS). Вы можете смонтировать один том в нескольких местах (но не более одной буквы диска, IIRC). Графический интерфейс для этой задачи представлен Панель управления -> Администрирование -> Управление компьютером -> Управление дисками .

Если вы хотите иметь более 26 накопителей с дополнительными накопителями , перенаправляющими на уже активные накопители и в порядке, с которыми они не работают должным образом в большинстве программ, вы можете назначить больше с помощью следующего метода ( имейте в виду, что они даже не будут отображаться в проводнике):

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

и удалить их (также они не сохраняются при перезапуске):

subst /D ♪:

Вы можете перечислить все тома и их точки монтирования, как описано в этой статье .

1 голос
/ 22 декабря 2009

Если перечислить диски MS-DOS недостаточно (кстати, их может быть не более 26, хотя каждый из них может быть связан дважды, один раз глобально и один раз локально в сеансе), например, том может , монтируется в каталог. Вероятно, вам нужно перечислить все тома в системе, используя FindFirstVolume и др. Взгляните на соответствующий MSDN пример .

1 голос
/ 22 декабря 2009

Вы можете использовать WMI . Следующий запрос WMI должен перечислить все диски:

SELECT * FROM Win32_DiskDrive
...