VB6: freier Speicherplatz auf einem Laufwerk

Von: , Frage gestellt am Mi, 9. Aug 2000

Hallo Expert(inn)en!

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

4 Antworten zu dieser Frage

  1. Antwort von nach 48 Minuten hilfreich
    Re: VB6: freier Speicherplatz auf einem Laufwerk

    Hi, 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: [E-Mail-Adresse entfernt]
    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
    

    Gruß

    J.

    • Antwort von nach 18 Stunden hilfreich
      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 ... ;-)
      Das tun wir gern:

    • Antwort von nach 23 Stunden hilfreich
      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

      Private Sub Form_Load()
      'KPD-Team 1998
      'URL: http://www.allapi.net/
      'E-Mail: [E-Mail-Adresse entfernt]

      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

      • Antwort von nach einem Tag hilfreich
        Re: Zusatz-Frage / -Problem

        ich nehme an die Multiplikanden sind Long-Variablen,
        z.b.

        Dim bla As Single
        Dim a As Long, b As Long
        a = 200000000#
        b = 20000000#
        bla = a * b
        

        gibt einen Overflow
        Dim bla As Single
        Dim a As Long, b As Long
        a = 200000000#
        b = 20000000#
        bla = CSng(a) * CSng(b)
        

        wandelt a und b in Single-Werte um und funkt ;-)
        lg [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!