Seite 1 von 1
Festplatten "herausfinden"
Verfasst: Samstag 2. August 2008, 08:48
von nemomuk
Hallo,
ich versuche gerade herauszufinden welche Festplatten in meinem System eingebunden sind und genauer gesagt: deren Laufwerksbuchstaben.
Ich will aber nur die Festplatten, kein USB, CD oder sonstiges Laufwerk.
Ich bi9n schon soweit, dass ich mir die Laufwerksbuchstaben von allen anzuzeigen
Code: Alles auswählen
import win32api
win32api.GetLogicalDriveStrings().split(chr(0))
Wie kann ich nun herausfinden, welches wirklich eine Festplatte ist?
Danke!
Verfasst: Samstag 2. August 2008, 09:31
von Zap
Also bei mir funktioniert GetVolumeInformation() nur auf meinen Festplatten.
Vielleicht reicht das ja..
Code: Alles auswählen
In [21]: for vol in win32api.GetLogicalDriveStrings().split(chr(0)):
....: try:
....: win32api.GetVolumeInformation(vol)
....: except Exception:
....: pass
....:
....:
Out[21]: ('System', -667408154, 255, 459007, 'NTFS')
Out[21]: ('Data', 214835321, 255, 459007, 'NTFS')
Out[21]: ('Data2', -732432179, 255, 459007, 'NTFS')
Edit: Das war zu voreilig. Ich sollte vielleicht mal ne CD einlegen oder nen Stick anklemmen, dann bekomme ich auch deren Volume Informations.
Re: Festplatten "herausfinden"
Verfasst: Samstag 2. August 2008, 09:51
von gerold
SchneiderWeisse hat geschrieben:ich versuche gerade herauszufinden welche Festplatten in meinem System eingebunden sind und genauer gesagt: deren Laufwerksbuchstaben.
Hallo SchneiderWeisse!
Vielleicht kannst du dir da etwas rausziehen:
-
http://www.microsoft.com/technet/script ... x?mfr=true
-
http://www.microsoft.com/technet/script ... x?mfr=true
EDIT: Oder besser noch:
-
http://www.microsoft.com/technet/script ... x?mfr=true
(Drive Type: 3)
EDIT2: Mit ``win32file.GetDriveType`` oder ``win32file.GetDriveTypeW`` bekommst du den Laufwerkstyp zurück. Als Ergebnis bekommst du eine dieser Konstanten zurück:
- win32file.DRIVE_CDROM
- win32file.DRIVE_FIXED
- win32file.DRIVE_NO_ROOT_DIR
- win32file.DRIVE_RAMDISK
- win32file.DRIVE_REMOTE
- win32file.DRIVE_REMOVABLE
- win32file.DRIVE_UNKNOWN
mfg
Gerold
PS: Mit einem zusätzlichen ``strip()`` bist du das Problem mit dem leeren Eintrag los: ``win32api.GetLogicalDriveStrings().strip(chr(0)).split(chr(0))``
.
Verfasst: Samstag 2. August 2008, 10:04
von nemomuk
danke, funktioniert etwas modifiziert wunderbar...
Code: Alles auswählen
drives = []
for drive in win32api.GetLogicalDriveStrings().split(chr(0)):
try:
drive_info = win32api.GetVolumeInformation(drive)
if drive_info[4] == 'NTFS' or drive_info[3] == 'FAT':
drives.append(drive)
except:
pass
EDIT: da ist ja schon wieder eine neue Antwort...
#
Danke!
EDIT2:
Für die, die es interessiert:
Code: Alles auswählen
drives = []
for drive in win32api.GetLogicalDriveStrings().split(chr(0)):
try:
if win32file.GetDriveType(drive) == 3:
drives.append(drive)
except:
pass
Verfasst: Samstag 2. August 2008, 10:17
von gerold
Hallo!
Ich habe mich auch noch ein wenig gespielt.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import win32api
import win32file
drive_type_strings = {
win32file.DRIVE_CDROM: "CDROM",
win32file.DRIVE_FIXED: "FIXED",
win32file.DRIVE_NO_ROOT_DIR: "NO_ROOT_DIR",
win32file.DRIVE_RAMDISK: "RAMDISK",
win32file.DRIVE_REMOTE: "REMOTE",
win32file.DRIVE_REMOVABLE: "REMOVABLE",
win32file.DRIVE_UNKNOWN: "UNKNOWN",
}
for drive_string in win32api.GetLogicalDriveStrings().strip(chr(0)).split(chr(0)):
drive_type = win32file.GetDriveType(drive_string)
print drive_string, drive_type_strings[drive_type]
Code: Alles auswählen
A:\ REMOVABLE
C:\ FIXED
D:\ CDROM
E:\ CDROM
H:\ REMOTE
J:\ FIXED
P:\ FIXED
T:\ REMOTE
mfg
Gerold

Verfasst: Samstag 2. August 2008, 10:20
von nemomuk
Ich bedanke mich!!!