首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python和GetLogicalDrives

Python和GetLogicalDrives
EN

Stack Overflow用户
提问于 2015-11-18 21:28:05
回答 1查看 911关注 0票数 3

我有一些关于以下代码的问题。

代码语言:javascript
复制
from win32 import win32file
drives = []
drivebits=win32file.GetLogicalDrives()
for d in range(1,26):

    mask=1 << d
    if drivebits & mask:
        drname='%c:\\' % chr(ord('A')+d)
        t=win32file.GetDriveType(drname)
        if t == win32file.DRIVE_REMOVABLE:
            drives.append(drname)
print(drives)

1-当您使用GetLogicalDrives from win32模块时,它会返回一个integer.Can,有人解释了原因吗?

2-为什么环路的范围在1到26之间?

3-按位计算的原因是什么?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-18 21:36:46

win32模块是Win32 API的底层包装器,所以通常您可以查看Win32函数名的文档并获取所需的信息。你可以找到这里是GetLogicalDrives的文档。

回答你的问题:

  1. 整数对应于可用驱动器:每个可用驱动器获得1位。因此,如果没有可用的驱动器,您将得到0,假设是32位整数)。如果每个驱动器都可用,您将得到0b11111111111111111111111111 (二进制文件)。
  2. 有26个字母,所以它循环通过26个数字。实际上,您发布的代码只是从1循环到25循环,我认为这是一个bug。应该是range(26)**.**
  3. 按位并将检查返回整数的各个位。请记住,整数的每个位对应于一个驱动器字母。例如,假设您的C、D和G驱动器是可用的。您可以像这样可视化返回的值,其中第一行是潜在的驱动器,第二行是二进制文件中的返回值: ZYXWVUTSRQPONMLKJIHGFEDCBA #驱动器位对应于0000000000000000000000000001001100#返回值,如果C、D和G可用,则为二进制

要检查驱动器A是否可用,您需要检查最小位为1。检查单个位的方式是按位和。要检查最小位,您需要执行drivebits & 1,要检查驱动器B,需要检查第二个位:drievebits & (1 << 1)。要检查C,您需要第三位:drivebits & (1 << 2)。诸若此类。

一些示例返回:

如果只有可用的驱动器C,GetLogicalDrives将返回0b100 (二进制)或4 (十进制)。如果C和D可用,您将得到0b1100 (二进制)或12 (十进制)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33790734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档