【问题标题】:How can I get a list of removable drives plugged in the computer?如何获取插入计算机的可移动驱动器列表?
【发布时间】:2017-01-04 13:57:53
【问题描述】:

我想获取插入计算机的可移动驱动程序的列表。

我认为可以通过使用一些注册表来完成,但我不知道具体如何。

如果有其他方式我想听听。

注意:重要的是我将能够将可移动驱动器与固定驱动器分开。

【问题讨论】:

    标签: python windows pywin32


    【解决方案1】:

    算法很简单:

    这是它在 Python 中的样子(使用 PyWin32 包装器)。将任何win32con.DRIVE_* 常量添加到 drive_types 元组以获得不同的驱动器类型组合:

    code00.py

    #!/usr/bin/env python3
    
    import sys
    import win32con
    from win32api import GetLogicalDriveStrings
    from win32file import GetDriveType
    
    
    def get_drives_list(drive_types=(win32con.DRIVE_REMOVABLE,)):
        drives_str = GetLogicalDriveStrings()
        drives = [item for item in drives_str.split("\x00") if item]
        return [item[:2] for item in drives if drive_types is None or GetDriveType(item) in drive_types]
    
    
    def main():
        drive_filters_examples = [
            (None, "All"),
            ((win32con.DRIVE_REMOVABLE,), "Removable"),
            ((win32con.DRIVE_FIXED, win32con.DRIVE_CDROM), "Fixed and CDROM"),
        ]
        for (drive_types_tuple, display_text) in drive_filters_examples:
            drives = get_drives_list(drive_types=drive_types_tuple)
            print("{0:s} drives:".format(display_text))
            for drive in drives:
                print("{0:s}  ".format(drive), end="")
            print("\n")
    
    
    if __name__ == "__main__":
        print("Python {0:s} {1:d}bit on {2:s}\n".format(" ".join(item.strip() for item in sys.version.split("\n")), 64 if sys.maxsize > 0x100000000 else 32, sys.platform))
        main()
        print("\nDone.")
    

    输出

    [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q041465580]> "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\Scripts\python.exe" code00.py
    Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] 64bit on win32
    
    All drives:
    C:  D:  E:  F:  G:  H:
    
    Removable drives:
    D:
    
    Fixed and CDROM drives:
    C:  E:  F:  G:  H:
    
    
    Done.
    

    【讨论】:

    • 如何读取 DRIVE_REMOVABLE 驱动器中的文件?谢谢
    • @Jim 文件系统为您完成所有底层工作,因此您读取文件时就像它驻留在其中一个固定驱动器上一样(通过指定其路径)。例如 C:\some_file_on_the_fixed_drive.txt 是固定驱动器上的文件(假设 C: 是您的 SYSTEM 驱动器),而如果您插入一个 U 盘,Win 会自动 mounts 让我们说 F:,您可以将可移动驱动器上的文件称为 F :\some_file_on_the_removable_drive.txt.
    • 感谢您的帮助,U盘工作正常,但是当我使用Android手机进行测试时,它会弹出一个对话框说THERE IS NO DISK IN THE DRIVE. PLEASE INSERT A DISK INTO DRIVE H:,也许我需要了解如何使用ADB Shell...再次感谢
    • @Jim:抱歉耽搁了,我错过了你的评论。手机不被视为可移动驱动器,因为它没有暴露该接口。我不确定您是否可以在手机和/或 PC 上安装第 3 方软件来实现该功能。
    • 提供有关依赖项以及如何安装它们的信息。
    【解决方案2】:

    我自己也有类似的问题。隔离@CristiFati 对仅可移动驱动器的回答,我为这个问题的任何新访问者拼凑了这个快速(非常简单)的功能:

    基本上,只需调用该函数,它就会向调用者返回所有可移动驱动器list

    import win32api
    import win32con
    import win32file
    
    def get_removable_drives():
        drives = [i for i in win32api.GetLogicalDriveStrings().split('\x00') if i]
        rdrives = [d for d in drives if win32file.GetDriveType(d) == win32con.DRIVE_REMOVABLE]
        return rdrives
    

    例如:调用get_removable_drives()会输出:

    ['E:\\']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多