Wer weiss, was man machen muss, um in einem VB6-Programm den freien Speicherplatz eines Laufwerks ermitteln zu können?
Ich hab zwar die Funktion GetDiskFreeSpace in der Kernel32.dll gefunden, aber diese liefert mir immer nur 0 zurück.
Mache ich vielleicht beim Aufruf der Funktion etwas falsch?
Was muss ich übergeben? Nur den Laufwerksbuchstaben (z. B. „C“) oder „C:“ oder „C:“? Ich habe alle 3 Varianten ausprobiert, immer mit dem gleichen Ergenbis (eben 0). An alle anderen Parameter habe ich 0 übergeben (jeweils in Variablen).
Ich bitte euch darum, einem armen, kleinen Österreicher zu helfen …
Roland
Ich bitte euch darum, einem armen, kleinen Österreicher zu
helfen …
Das tun wir gern:
aus dem API-Guide:
'In general section
Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long
Private Sub Form\_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: [email protected]
Dim Sectors as Long,Bytes as Long,FreeC as Long, TotalC as Long,Total as Long,Freeb as Long
'Retrieve information about the C:\
GetDiskFreeSpace "C:\", Sectors, Bytes, Freec, Totalc
'Set graphic mode to persistent
Me.AutoRedraw = True
'Print the information to the form
Me.Print " Path: C:\"
Me.Print " Sectors per Cluster:" + Str$(Sector)
Me.Print " Bytes per sector:" + Str$(Bytes)
Me.Print " Number Of Free Clusters:" + Str$(Freec)
Me.Print " Total Number Of Clusters:" + Str$(Totalc)
Total = rTotalc& \* rSector& \* rBytes&
Me.Print " Total number of bytes in path:" + Str$(Total)
Freeb = rFreec& \* rSector& \* rBytes&
Me.Print " Free bytes:" + Str$(Freeb)
End sub
vielen Dank!
Danke, so funktioniert es jetzt bei mir!
Fast hätte ich es ja selber gehabt, aber eben nur fast … knapp daneben ist auch vorbei, sagt man …
Roland
Hi,
Ich bitte euch darum, einem armen, kleinen Österreicher zu
helfen …
Zusatz-Frage / -Problem
Wenn die Multiplikation von Sectors per Cluster, Bytes per Cluster und Number of free Clusters einen Wert > 2.147.483.647 ergibt (also mehr als 2 GB auf dem Laufwerk frei sind), dann stürzt das Ding mit einem Overflow-Error ab. Ich hab dann die Variable für das Ergebnis der Multiplikation als single (statt long) definiert, das müsste doch für grössere Zahlen (bis 10 hoch 38 oder so) reichen, oder? Der Overflow kommt aber trotzdem! Oder liegt es an einer anderen Kleinigkeit, an der ich wieder einmal haarscharf vorbeischaue?
der wahrscheinlich den Wald vor lauter Bäumen (oder die Festplatte vor lauter Bytes oder so *g*) nicht sehende
Roland
Private Declare Function GetDiskFreeSpace Lib „kernel32“ Alias
„GetDiskFreeSpaceA“ (ByVal lpRootPathName As String,
lpSectorsPerCluster As Long, lpBytesPerSector As Long,
lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As
Long) As Long
Dim Sectors as Long,Bytes as Long,FreeC as Long, TotalC as
Long,Total as Long,Freeb as Long
'Retrieve information about the C:\
GetDiskFreeSpace „C:“, Sectors, Bytes, Freec, Totalc
'Set graphic mode to persistent
Me.AutoRedraw = True
'Print the information to the form
Me.Print " Path: C:"
Me.Print " Sectors per Cluster:" + Str$(Sector)
Me.Print " Bytes per sector:" + Str$(Bytes)
Me.Print " Number Of Free Clusters:" + Str$(Freec)
Me.Print " Total Number Of Clusters:" + Str$(Totalc)
Total = rTotalc& * rSector& * rBytes&
Me.Print " Total number of bytes in path:" + Str$(Total)
Freeb = rFreec& * rSector& * rBytes&
Me.Print " Free bytes:" + Str$(Freeb)
End sub