Festplatten "herausfinden"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

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!
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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.
Zuletzt geändert von Zap am Samstag 2. August 2008, 09:53, insgesamt 1-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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))``

.
Zuletzt geändert von gerold am Samstag 2. August 2008, 10:10, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
Zuletzt geändert von gerold am Samstag 2. August 2008, 10:23, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Ich bedanke mich!!!
Antworten