9 votes

en Python, comment séparer les disques durs locaux du réseau et des disquettes dans Windows ?

Je cherche cette info depuis un moment, et j'ai plusieurs façons de récupérer une liste de lecteurs locaux sous Windows. Voici deux exemples :

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

y

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

Ce que je n'arrive pas à trouver, c'est un moyen de séparer les disquettes (A :), les lecteurs usb (G :), les lecteurs de CD (E :) et les lecteurs réseau (P :) des disques durs locaux (C :, D :).

Si on leur attribuait toutes les mêmes lettres, ce serait facile, mais j'écris ce script pour surveiller l'espace du disque dur local à travers un réseau d'ordinateurs avec différentes configurations.

Toute aide serait appréciée ! Merci.

10voto

Mark Points 33086

Vous pouvez essayer la version win32 GetDriveType fonction.

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

0voto

stancikcom Points 30

Merci pour votre post - m'a aidé avec un portage ruby. La méthode getDriveLetters renvoie un hash (dict) : chaîne de lettres de lecteur, chaîne de type de lecteur.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X