Tipp 5.10 - Festplattenplatz
Wie kann ich die Festplattengesamtgröße und den freien Platz ermitteln?
Mit dieser Funktion können Sie die Festplattengesamtgröße und den freien Platz ermitteln. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.
Verwendete Win32-Api-Aufrufe und Typen: GetDiskFreeSpaceEx, GetDiskFreeSpace, GetDriveType
Beispiel:
Option Explicit Public Declare Function GetDiskFreeSpaceEx _ Lib "kernel32" Alias _ "GetDiskFreeSpaceExA" _ (ByVal lpDirectoryName As String, _ lpFreeBytesAvailableToCaller As Any, _ lpTotalNumberOfBytes As Any, _ lpTotalNumberOfFreeBytes As Any) As Long Public Declare Function GetDiskFreeSpace _ Lib "kernel32" Alias _ "GetDiskFreeSpaceA" _ (ByVal lpRootPathName As String, _ lpSectorsPerCluster As Long, _ lpBytesPerSector As Long, _ lpNumberOfFreeClusters As Long, _ lpTotalNumberOfClusters As Long) As Long Public Declare Function GetDriveType _ Lib "kernel32" Alias _ "GetDriveTypeA" (ByVal nDrive As String) As Long Public Sub HDSizeInfo(ByRef sVolTotalSpace As String, _ ByRef sVolFreeSpace As String, _ ByVal sDrive As String) '// ----------------------------------------------------- '// Methode: | Festplattengesamtgröße und freien Platz '// | ermitteln '// ----------------------------------------------------- '// Parameter: | sVolTotalSpace - Gesamtgröße '// | sVolFreeSpace - verfügbarer Platz '// | sDrive - Laufwerk '// ----------------------------------------------------- '// Rückgabe: | s.o. '// ----------------------------------------------------- '// Autor: | Stefan Kulpa '// | EDV Innovation & Consulting - Dormagen '// ----------------------------------------------------- '// Beispiel: '// ----------------------------------------------------- '// Dim sVolTotalSpace As String '// Dim sVolFreeSpace As String '// HDSizeInfo sVolTotalSpace, sVolFreeSpace, "C:" '// Debug.Print "Laufwerk C:" & vbCrLf & vbTab & _ '// "Gesamt: " & sVolTotalSpace & vbCrLf & vbTab & _ '// "Davon noch frei: " & sVolFreeSpace '// ----------------------------------------------------- Const DRIVE_FIXED = 3 Dim iDrvType As Integer If Len(Trim(sDrive)) = 0 Then sDrive = "C" sDrive = UCase$(Left$(sDrive, 1)) & ":" iDrvType = GetDriveType(sDrive) If iDrvType = DRIVE_FIXED Then If GetVolSpaceData(sDrive, sVolTotalSpace, _ sVolFreeSpace) <> 0 Then sVolTotalSpace = sVolTotalSpace & " Byte" sVolFreeSpace = sVolFreeSpace & " Byte" End If End If End Sub Private Function GetVolSpaceData( _ sDrive As String, _ sTotalSpace As String, _ sFreeSpace As String) As Long '// ----------------------------------------------------- '// Festplattenwerte größer als 2 GB lassen sich nicht '// GetDiskFreeSpace ermitteln. '// Die Funktion GetDiskFreeSpaceEx() steht u.U. erst ab '// Win95b zur Verfügung. '// ----------------------------------------------------- Const csNUMFORMAT As String = "###,###,###,###,###" '// ----------------------------------------------------- '// Rückgabewerte für GetDiskFreeSpaceEx() '// ----------------------------------------------------- 'Überlauf vermeiden! Dim lFreeBytesAvailableToCaller As Currency Dim lTotalNumberOfBytes As Currency Dim lTotalNumberOfFreeBytes As Currency '// ----------------------------------------------------- '// Rückgabewerte für GetDiskFreeSpace() '// ----------------------------------------------------- Dim lBytesPerSector As Long Dim lSectorsPerCluster As Long Dim lNumberOfFreeClusters As Long Dim lTotalNumberOfClusters As Long Dim lTotal As Long Dim lRes As Long On Error Resume Next '! '// ----------------------------------------------------- '// 1. Versuch: GetDiskFreeSpaceEx() benutzen '// ----------------------------------------------------- lRes = GetDiskFreeSpaceEx(sDrive, _ lFreeBytesAvailableToCaller, _ lTotalNumberOfBytes, _ lTotalNumberOfFreeBytes) If lRes <> 0 Then sTotalSpace = _ Format$(lTotalNumberOfBytes * 10000, csNUMFORMAT) sFreeSpace = _ Format$(lTotalNumberOfFreeBytes * 10000, _ csNUMFORMAT) Else '// --------------------------------------------------- '// 2. Versuch: GetDiskFreeSpace() benutzen '// --------------------------------------------------- lRes = GetDiskFreeSpace(sDrive, _ lSectorsPerCluster, _ lBytesPerSector, _ lNumberOfFreeClusters, _ lTotalNumberOfClusters) If lRes <> 0 Then lTotal = lSectorsPerCluster lTotal = lTotal * lBytesPerSector * _ lTotalNumberOfClusters sFreeSpace = _ Format$(lSectorsPerCluster * _ lBytesPerSector * _ lNumberOfFreeClusters, csNUMFORMAT) sTotalSpace = _ Format$(lTotal, csNUMFORMAT) End If End If GetVolSpaceData = lRes End Function