代码之家  ›  专栏  ›  技术社区  ›  PabloG

如何在Python/Windows中获取本地驱动器的列表而不使用替代驱动器?

  •  1
  • PabloG  · 技术社区  · 14 年前

    我正在寻找一种方法来获取Windows机器上的所有本地驱动器, 到目前为止,我有两个选择

    (一)

    # 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:drive是一个子驱动器(例如:用SUBST G:C:\ TEST创建的), 我找不到方法来区分它与“真正的”本地驱动器。

    有什么想法吗?

    蒂亚, 巴勃罗

    1 回复  |  直到 14 年前
        1
  •  1
  •   Katriel    14 年前

    谷歌告诉我,如果你尝试为一个子驱动器获取一个GUID,它将失败:

    >>> 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.')
    

    这似乎有效,但可能不可靠。