Hej Pröva detta (som skall klistras in på en vanlig form) Hmm, när kan "Total Free Bytes" och "Free Bytes Available" vara olika ? Om man har aktiverat disk quota på Windows 2000 eller senare, så att användaren inte har rätt att utnyttja hela diskutrymmet.Hur ta fram ledigt utrymme på hårddisken?
Jag vill se totalt och ledigt utrymme på hårddisken och använder nedanstående kod, men det funkar inte, koden (API't) visar bara rätt utrymme om det är mindre än 2 048 MB
Jag kör Win98SE och VS60SP5.
Hur gör man annars för att kolla utrymme på diskarna ?
För att testa koden så skapa ett nytt standardprojekt, smocka in en knapp och klistra in koden.
<code>
Private Declare Function apiDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long
Private Sub Command1_Click()
Dim ENTER As String
Dim TotalClusters As Long
Dim FreeClusters As Long
Dim SectorsPerCluster As Long
Dim BytesPerSector As Long
Dim TotalSpace As Long
Dim FreeSpace As Long
Dim Msg As String
ENTER = Chr$(13) + Chr$(10)
If apiDiskFreeSpace("c:\", SectorsPerCluster, BytesPerSector, FreeClusters, TotalClusters) Then
TotalSpace = SectorsPerCluster * BytesPerSector * TotalClusters
FreeSpace = SectorsPerCluster * BytesPerSector * FreeClusters
Else
TotalSpace = 0
FreeSpace = 0
End If
Msg = "Totalt utrymme: "
Msg = Msg & LTrim(Format(TotalSpace / 1024 / 1024, "# ### ##0")) & " MB ("
Msg = Msg & LTrim(Format(TotalSpace, "# ### ### ### ##0")) & " Bytes)"
Msg = Msg & ENTER & ENTER
Msg = Msg & "Ledigt utrymme: "
Msg = Msg & LTrim(Format(FreeSpace / 1024 / 1024, "# ### ##0")) & " MB ("
Msg = Msg & LTrim(Format(FreeSpace, "# ### ### ### ##0")) & " Bytes)"
Msg = Msg & ENTER
MsgBox Msg
End Sub
</code>
Mvh/OlofSv: Hur ta fram ledigt utrymme på hårddisken?
<code>
Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency, lpTotalNumberOfFreeBytes As Currency) As Long
Private Sub Form_Load()
Dim r As Long, BytesFreeToCalller As Currency, TotalBytes As Currency
Dim TotalFreeBytes As Currency, TotalBytesUsed As Currency
'the drive to find
Const RootPathName = "C:\"
'get the drive's disk parameters
Call GetDiskFreeSpaceEx(RootPathName, BytesFreeToCalller, TotalBytes, TotalFreeBytes)
'show the results, multiplying the returned
'value by 10000 to adjust for the 4 decimal
'places that the currency data type returns.
Me.AutoRedraw = True
Me.Cls
Me.Print
Me.Print " Total Number Of Bytes:", Format$(TotalBytes * 10000, "###,###,###,##0") & " bytes"
Me.Print " Total Free Bytes:", Format$(TotalFreeBytes * 10000, "###,###,###,##0") & " bytes"
Me.Print " Free Bytes Available:", Format$(BytesFreeToCalller * 10000, "###,###,###,##0") & " bytes"
Me.Print " Total Space Used :", Format$((TotalBytes - TotalFreeBytes) * 10000, "###,###,###,##0") & " bytes"
End Sub
</code>
/IvarSv: Hur ta fram ledigt utrymme på hårddisken?
När jag testar på mina diskar så får jag samma på dessa två.
/OlofSv: Hur ta fram ledigt utrymme på hårddisken?
MS