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

Samstag 2. August 2008, 08:48

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

Samstag 2. August 2008, 09:31

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Samstag 2. August 2008, 09:51

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.
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Samstag 2. August 2008, 10:04

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Samstag 2. August 2008, 10:17

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.
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Samstag 2. August 2008, 10:20

Ich bedanke mich!!!
Antworten