Rubrik: Dateisystem | 15.11.01 |
GetDiskFreeSpace-Funktion Diese Funktion liefert die Größe des gesamten und freien Festplattenspeichers einer Festplatte bis zu einer Größe von 2 Gigabyte. | ||
Betriebssystem: Win95, Win98, WinNT 3.1, Win2000, WinME | Views: 11.591 |
Deklaration:
Declare Function GetDiskFreeSpace Lib "kernel32.dll" _ Alias "GetDiskFreeSpaceA" ( _ ByVal lpRootPathName As String, _ lpSectorsPerCluster As Long, _ lpBytesPerSector As Long, _ lpNumberOfFreeClusters As Long, _ lpTotalNumberOfClusters As Long) As Long
Beschreibung:
Diese Funktion liefert die Größe des gesamten und freien Festplattenspeichers einer Festplatte bis zu einer Größe von 2 Gigabyte.
Parameter:
lpRootPathName | Erwartet den Laufwerksbuchstaben als Strings, zb. "a:\, c:\ etc.".. |
lpSectorsPerCluster | Gibt die Anzahl der Sektoren pro Cluster zurück |
lpBytesPerSector | Gibt die Bytes pro Sektor zurück |
lpNumberOfFreeClusters | Gibt die Anzahl der Cluster des freien Speicherplatzes zurück. |
lpTotalNumberOfClusters | Gibt die Anzahl der Cluster des gesamten Speicherplatzes zurück. |
Rückgabewert:
Ist die Funktion erfolgreich, wird ein Wert "ungleich 0", andernfalls "0" zurückgegeben. Für erweiterte Fehlerinformationen rufen Sie die GetLastError-Funktion auf.
Beispiel:
Private Declare Function GetDiskFreeSpace Lib "kernel32.dll" _ Alias "GetDiskFreeSpaceA" ( _ ByVal lpRootPathName As String, _ lpSectorsPerCluster As Long, _ lpBytesPerSector As Long, _ lpNumberOfFreeClusters As Long, _ lpTotalNumberOfClusters As Long) As Long Private Declare Function GetDiskFreeSpaceEx Lib "kernel32.dll" _ Alias "GetDiskFreeSpaceExA" ( _ ByVal lpDirectoryName As String, _ lpFreeBytesAvailableToCaller As ULARGE_INTEGER, _ lpTotalNumberOfBytes As ULARGE_INTEGER, _ lpTotalNumberOfFreeBytes As ULARGE_INTEGER) As Long Private Declare Function GetVersionEx Lib "kernel32.dll" _ Alias "GetVersionExA" ( _ lpVersionInformation As OSVERSIONINFO) As Long Private Declare Function GetLogicalDriveStrings Lib "kernel32.dll" _ Alias "GetLogicalDriveStringsA" ( _ ByVal nBufferLength As Long, _ ByVal lpBuffer As String) As Long Private Declare Sub CopyMemory Lib "kernel32.dll" _ Alias "RtlMoveMemory" ( _ Destination As Any, _ Source As Any, _ ByVal Length As Long) Private Type ULARGE_INTEGER LowPart As Long HighPart As Long End Type Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type Private Const VER_PLATFORM_WIN32s = 0 ' Win 3.1 mit 32 Bit-Erweiterung Private Const VER_PLATFORM_WIN32_WINDOWS = 1 ' Win NT/2000 Private Const VER_PLATFORM_WIN32_NT = 2 ' Win 9x
Private Sub Command1_Click() Dim Retval As Long Dim OS As OSVERSIONINFO Dim InputRet As String Dim Buffer As String ' Laufwerksbuchstaben ermitteln Buffer = Space(256) Retval = GetLogicalDriveStrings(Len(Buffer), Buffer) Buffer = Left$(Buffer, Retval) Buffer = Replace(Buffer, "\" & vbNullChar, ", ") ' User nach dem Laufwerk fragen, dessen Informationen ' ermittelt werden sollen InputRet = InputBox("Geben Sie einen Laufwerksbuchstaben ein " & _ "(" & Buffer & ").", "Speicher Information ermitteln", "C:\") If InputRet = "" Or Len(InputRet) > 3 Then MsgBox "Ungültige Eingabe - nur Laufwerksbuchstaben, " & _ "Doppelpunkt und Backslash eingeben." Exit Sub End If ' Betriebssystem ermitteln OS.dwOSVersionInfoSize = Len(OS) Retval = GetVersionEx(OS) If Retval = 0 Then MsgBox "Betriebssystem-Version konnte nicht ermittelt werden." Exit Sub End If ' Je nach Betriebsystem, entsprechende ' API-Funktion aufrufen With OS Select Case .dwPlatformId Case VER_PLATFORM_WIN32_WINDOWS If InStr(1, OS.szCSDVersion, "B") <> 0 Or _ .dwMinorVersion > 0 Then ' Win98 oder höher Call GetNewFreespace(InputRet) Else Call GetOldFreespace(InputRet) End If Case VER_PLATFORM_WIN32_NT If .dwMajorVersion >= 4 Then ' WinNT 4/Win2000/WinXP Call GetNewFreespace(InputRet) Else Call GetOldFreespace(InputRet) End If Case Else MsgBox "Windows 3.x Version kann nicht ermittelt werden." End Select End With End Sub
' "alte Version" von GetDiskFreespace Private Function GetOldFreespace(ByVal Root As String) Dim Retval As Long Dim SC As Long, BC As Long, FC As Long, TC As Long Dim TSpace As Long, FSpace As Long, USpace As Long ' HD-Speierauslastung ermitteln und ausrechnen Retval = GetDiskFreeSpace(Root, SC, BC, FC, TC) TSpace = TC * SC * BC / 1024 / 1024 FSpace = FC * SC * BC / 1024 / 1024 USpace = TSpace - FSpace ' Festplattenauslastung ausgeben MsgBox "Gesamt: " & Format$(TSpace, "##.00 MB") & vbCrLf & _ "Belegt: " & Format$(USpace, "##.00 MB") & vbCrLf & _ "Frei: " & Format$(FSpace, "##.00 MB") & vbCrLf _ , , "Festplattenspeicher Laufwerk """ & Root & """" End Function
' "neue Version" von GetDiskFreespace Private Function GetNewFreespace(ByVal Root As String) Dim Retval As Long Dim CBytes As ULARGE_INTEGER Dim TBytes As ULARGE_INTEGER Dim FBytes As ULARGE_INTEGER Dim CB As Currency Dim TB As Currency Dim FB As Currency Dim UB As Currency ' Speicherauslastung ermitteln und berechnen Retval = GetDiskFreeSpaceEx(Root, CBytes, TBytes, FBytes) CopyMemory CB, CBytes, 8 CB = CB * 10000 / 1024 / 1024 CopyMemory TB, TBytes, 8 TB = TB * 10000 / 1024 / 1024 CopyMemory FB, FBytes, 8 FB = FB * 10000 / 1024 / 1024 UB = TB - FB MsgBox "Gesamt: " & Format$(TB, "##.00 MB") & vbCrLf & _ "Belegt: " & Format$(UB, "##.00 MB") & vbCrLf & _ "Frei: " & Format$(FB, "##.00 MB") & vbCrLf _ , , "Festplattenspeicher Laufwerk """ & Root & """" End Function