Home > Visual Basic Classic > Dateisystem > Dateisystem eines Laufwerks ermitteln / auslesen

Dateisystem eines Laufwerks ermitteln / auslesen

Veröffentlicht am 09.09.2008 von Sebastian Krogolewski

Artikelinformationen

Sprache:
Visual Basic 6
Datenbank:
keine

Artikel speichern

del.icioMister WongGoogleLinkarenaYiggSpurlFurl

Artikel bewerten

Bewertng:4.50 / 5 (6 mal bewertet)

Folgender Artikel zeigt wie man mit Hilfe der Win API Funktion GetVolumeInformationA bzw. GetVolumeInformationW aus der Kernel32.Dll das Dateisystem eines Lauwerks ermitteln kann.

 

Konstante MAX_PATH definieren:

1
Public Const MAX_PATH As Long = 260

 

Einbinden der Win API Funktion GetVolumeInformationA bzw. GetVolumeInformationW als GetVolumeInformationAPI aus der Kernel32.Dll:

1
2
3
4
5
Public Declare Function GetVolumeInformationAPI Lib "Kernel32" Alias "GetVolumeInformationA" ( _
    ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, _
    ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, _
    lpMaximumComponentLength As Long, lpFileSystemFlags As Long, _
    ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As String) As Long

GetVolumeInformationA erwartet 8 Parameter:

lpRootPathName: Zeiger auf eine Zeichenkette welche das Wurzelverzeichnis des zu beschreibenden Laufwerks enthält.

lpVolumeNameBuffer: Zeiger auf reservierten Speicher in welchen die Laufwerksbezeichnung geschrieben wird. Maximale größe ist MAX_PATH + 1.

nVolumeNameSize: Größe des reservierten Speichers für die Laufwerksbezeichnung. Maximal MAX_PATH + 1.

lpVolumeSerialNumber: Zeiger auf eine Variable in der die Seriennummer zurückgeliefert wird. Wenn NULL übergeben wird, wird die Seriennummer nicht ermittelt.

lpMaximumComponentLength: Zeiger auf eine Variable welche die Maximallänge eines Teils einer Pfadangabe (zwischen zwei Backslasches) zurückliefert.

lpFileSystemFlags: Zeiger auf eine Variable in der Alle Eigenschaften des verwendeten Dateisystems zurückgeliefert werden.

lpFileSystemNameBuffer: Zeiger auf reservierten Speicher in welchem die Dateisystembezeichnung zurückgeliefert wird. Maximale Länge ist MAX_PATH + 1.

nFileSystemNameSize: Größe des reservierten Speichers für die Dateisystembezeichnung. Maximal MAX_PATH + 1.

 

Rückgabewert:

Bei Erfolg: Wenn die Funktion erfolgreich ausgeführt wurde liefert die Funktion ein Wert <> 0 zurück.

Bei Fehlschlag: Wenn die Funktion fehlschlägt liefert die Funktion den Wert 0 zurück. Mit GetLastError können weiter Informationen zum Fehler ermittelt werden.

 

1
2
3
4
56
7
8
9
1011
12
13
14
1516
Public Function getFilesystem(ByVal DriveLetter As String) As String
Dim strVolumeLabel As String
Dim strFilesystem As String
Dim lenFilesystem As Long
Dim RetVal As Long 
strVolumeLabel = String$(MAX_PATH + 1, 0)
strFilesystem = String$(MAX_PATH + 1, 0)
RetVal = GetVolumeInformationAPI(Left$(DriveLetter, 1) & ":\", strVolumeLabel, Len(strVolumeLabel), &O0, &O0, &O0, strFilesystem, Len(strFilesystem))
If (RetVal <> 0) Then    lenFilesystem = InStr(1, strFilesystem, vbNullChar) - 1
    If (lenFilesystem > 0) Then
        getFilesystem = Left$(strFilesystem, lenFilesystem)
    End If
End IfEnd Function

Diese Funktion liefert das Dateisystem als String zurück z.B. NTFS oder FAT32. Diese kann jetzt so erweitert werden, dass ein Enum als Rückgabewert zurückliefert wird und alle Fallunterscheidung ohne jegliche Stringvergleiche möglich sind.

 

Definieren des Enums:

1
2
3
4
56
Public Enum enFilesystem
    vbFsUnknown = 0
    vbFsNtfs = 1
    vbFsFat32 = 2
    vbFsFat = 3End Enum

Nach dem das Enum definiert wurde, wird die Funktion so erweitert das sie diesen als Rückgabetyp verwendet. Mit einem Select Case auf den String der die Dateisystembezeichnung enthält wird jetzt der neue Rückgabewert bestimmt.

 

Erweiterte Funktion
1
2
3
4
56
7
8
9
1011
12
13
14
1516
17
18
19
2021
22
23
24
2526
27
28
29
3031
32
33
Public Function getFilesystemEx(ByVal DriveLetter As String) As enFilesystemDim strVolumeLabel As String
Dim strFilesystem As String
Dim lenFilesystem As Long
Dim RetVal As Long
 strVolumeLabel = String$(MAX_PATH + 1, 0)
strFilesystem = String$(MAX_PATH + 1, 0)
RetVal = GetVolumeInformationAPI(Left$(DriveLetter, 1) & ":\", strVolumeLabel, Len(strVolumeLabel), &O0, &O0, &O0, strFilesystem, Len(strFilesystem))
If (RetVal <> 0) Then
    lenFilesystem = InStr(1, strFilesystem, vbNullChar) - 1    If (lenFilesystem > 0) Then
        'Dateisystem aus Klartext in enFilesystem umwandeln
        Select Case UCase(Left$(strFilesystem, lenFilesystem))
            Case "NTFS"
                getFilesystemEx = vbFsNtfs                
            Case "FAT32"
                getFilesystemEx = vbFsFat32
                
            Case "FAT"                getFilesystemEx = vbFsFat
                
            Case Else
                getFilesystemEx = vbFsUnknown
                        End Select
    Else
        getFilesystemEx = vbFsUnknown
    End If
Else    getFilesystemEx = vbFsUnknown
End If
End Function

 

Hinweis:

Das Enum und die erweiterte Funktion beinhaltet in diesem Beispiel keine vollständige Liste von Dateisystemen welche Windows erkennt.

 

Downloads

Suchbegriffe

VB6, Visual Basic, GetVolumeInformation, GetVolumeInformationA, GetVolumeInformationW

Suche