在Python中,如何在Windows中将本地硬盘与网络和软盘分开?

时间:2010-12-20 16:26:23

标签: python winapi

我一直在寻找这个信息,我有很多方法可以在Windows下检索本地驱动器列表。以下是两个例子:

print win32api.GetLogicalDriveStrings().split("\x00")

def getDriveLetters(self):
    self.drvs = []
    n_drives = win32api.GetLogicalDrives()
    for i in range(0,25): #check all drive letters
        j = 2**i # bitmask for each letter
        if n_drives & j > 0:
            self.drvs.append(chr(65+i)+":/")
    print self.drvs

我似乎无法找到从本地硬盘驱动器中分离软盘(A :),USB驱动器(G :),CD驱动器(E :)和网络驱动器(P :)的方法( C:,D:)

如果他们都被分配了相同的字母,那将很容易,但我正在编写此脚本来监控具有不同配置的计算机网络中的本地硬盘空间。

任何帮助将不胜感激!感谢。

2 个答案:

答案 0 :(得分:10)

您可以尝试win32 GetDriveType功能。

import win32file
>>> win32file.GetDriveType("C:/") == win32file.DRIVE_FIXED ##hardrive
True
>>> win32file.GetDriveType("Z:/") == win32file.DRIVE_FIXED ##network
False
>>> win32file.GetDriveType("D:/") == win32file.DRIVE_FIXED ##cd-rom
False

答案 1 :(得分:0)

感谢您的帖子 - 帮我一个红宝石端口。方法getDriveLetters返回hash(dict):驱动器盘符串,驱动器类型字符串。

require 'Win32API'

GetLogicalDrives = Win32API.new('kernel32', 'GetLogicalDrives', 'V', 'L')
GetDriveType = Win32API.new('kernel32', 'GetDriveType', 'P', 'I')

def GetDriveType(path)
    GetDriveType.call(path)
end

def GetLogicalDrives()
    GetLogicalDrives.call()
end

def getDriveLetters
    drivetype = {
        0 => 'DRIVE_UNKNOWN',
        1 => 'DRIVE_NO_ROOT_DIR',
        2 => 'DRIVE_REMOVABLE',
        3 => 'DRIVE_FIXED', 
        4 => 'DRIVE_REMOTE', 
        5 => 'DRIVE_CDROM', 
        6 => 'DRIVE_RAMDISK'
    }

    drvs = []
    n_drives = GetLogicalDrives()

    for i in 0..25 do #check all drive letters
        j = 2**i # bitmask for each letter
        if n_drives & j > 0 then
            drive = (65+i).chr + ":/"
            drvs += [drive => drivetype[GetDriveType(drive)]]
        end
    end
    return drvs
end

puts getDriveLetters