Как получить список локальных дисков без названий SUBST в Python / Windows? - PullRequest
1 голос
/ 11 ноября 2010

Я ищу способ получить все локальные диски на компьютере с Windows. До сих пор я пробовал с двумя вариантами

1)

# Win32Com
from win32com.client import Dispatch
import sys

fso = Dispatch('Scripting.FileSystemObject')
for drive in fso.Drives:
    print drive, drive.DriveType

2)

# win32api
import win32api
import win32file
drives = (drive for drive in win32api.GetLogicalDriveStrings().split("\000") if drive)
for drive in drives:
    print drive, win32file.GetDriveType(drive)

Эти два способа работают (почти) нормально, я получаю список моих дисков, например:

A: 1    // Removable
C: 2    // Fixed
D: 2    
E: 2
G: 2    // Fixed    (??? SUBST'ed drive)
I: 4    // Cd-Rom
X: 3    // Network

, но диск G: является диском SUBST (например, создан с помощью SUBST)G: C: \ TEST), и я не могу найти способ отличить его от «настоящего» локального диска.

Есть идеи?

TIA, Pablo

1 Ответ

1 голос
/ 11 ноября 2010

Google сообщает мне, что если вы попытаетесь получить GUID для диска SUBST-ed, произойдет сбой:

>>> import win32file
>>> win32file.GetVolumeNameForVolumeMountPoint("C:\\")
'\\\\?\\Volume{50c800a9-c62e-11df-b5bb-806e6f6e6963}\\'
>>> win32file.GetVolumeNameForVolumeMountPoint("K:\\")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pywintypes.error: (87, 'GetVolumeNameForVolumeMountPoint', 
                       'The parameter is incorrect.')

Это работает, но может быть ненадежным.

...