vrije schijfruimte

Status
Niet open voor verdere reacties.

famlam

Gebruiker
Lid geworden
15 okt 2008
Berichten
416
Hoe kun je in visual basic de hoeveelheid vrije schijfruimte op de huidige schijf opzoeken?
(en in welke eenheid komt deze? GB, MB, kB of bytes?)
dim vrijeruimte as integer = ???
 

This code will allow you get the free disk space on a drive which is over 2 Gb in size. Put all this code into a module

Deze code kijkt naar schijven groter dan 2 GB. Ik heb deze code juist nodig om te kunnen draaien op elke schijf.

Als iemand het programma op een USB zet, is het belangrijk om te weten of het programma iets kan downloaden. Als dit niet zo is wordt de download in 'mijn documenten' opgeslagen, anders gewoon op de usb.

Juist op USB's loop je snel het risico dat de schijf te vol raakt. En aangezien een groot deel van de USB's nog steeds 1GB is, heb ik dus niets aan een code die meer nodig heeft als 2GB om te werken...

Dus als iemand een code weet die wel op ELKE grootte werkt: graag...
 
Code:
    Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, ByRef lpFreeBytesAvailableToCaller As Long, ByRef lpTotalNumberOfBytes As Long, ByRef lpTotalNumberOfFreeBytes As Long) As Long
    Public Function GetFreeSpace(ByVal Drive As String) As Long
        Dim lBytesTotal, lFreeBytes, lFreeBytesAvailable, iAns As Long
        iAns = GetDiskFreeSpaceEx(Drive, lFreeBytesAvailable, lBytesTotal, lFreeBytes)
        If iAns > 0 Then
            Return BytesToMegabytes(lFreeBytes)
        Else
            Throw New Exception("Kon niet lezen van deze schijf")
        End If
    End Function
    Public Function GetTotalSpace(ByVal Drive As String) As String
        Dim lBytesTotal, lFreeBytes, lFreeBytesAvailable, iAns As Long
        iAns = GetDiskFreeSpaceEx(Drive, lFreeBytesAvailable, lBytesTotal, lFreeBytes)
        If iAns > 0 Then
            Return BytesToMegabytes(lBytesTotal)
        Else
            Throw New Exception("Kon niet lezen van deze schijf")
        End If
    End Function
    Public Function BytesToMegabytes(ByVal Bytes As Long) As Long
        Dim dblAns As Decimal
        dblAns = Bytes / 1024 ^ TrackBarEenheid.Value
        Return Math.Round(dblAns, 2)
    End Function

Ondanks de math.round(...,2) aan het einde wordt hij toch op 0 decimalen afgerond, terwijl dat op 2 zou moeten zijn. Wat doe ik fout?
 
Maak eens van alle "Longs" het type "Decimal"

Had ik geprobeerd... De waarden van "Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, ByRef lpFreeBytesAvailableToCaller As Long, ByRef lpTotalNumberOfBytes As Long, ByRef lpTotalNumberOfFreeBytes As Long) As Long" zijn daar echter te lang voor.
 
Opgelost!
het bleek voldoende om alleen de 'declare' als long te geven, en de rest als decimal.
Toch bedankt!
 
dit lijkt me een makkelijkere oplossing dan te klooien met vb6 APIs

Code:
Public Class Form1

    Public ReadOnly Property DriveSize(ByVal DriveLetter As String, ByVal _Size As SizeText) As String
        Get
            Dim DI As New IO.DriveInfo(DriveLetter)

            Dim Space As String = DI.AvailableFreeSpace

            Select Case _Size.ToString
                Case "KB"
                    Space = Format((Space / 1024), "0.0") & " KB"
                Case "MB"
                    Space = Format(((Space / 1024) / 1024), "0.0") & " MB"
                Case "GB"
                    Space = Format((((Space / 1024) / 1024) / 1024), "0.0") & " GB"
                Case "TB"
                    Space = Format(((((Space / 1024) / 1024) / 1024) / 1024), "0.0") & " TB"
            End Select

            Return Space
        End Get

    End Property

    Public Enum SizeText
        TB
        GB
        MB
        KB
    End Enum

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim a As String = DriveSize("c:\", SizeText.MB)

    End Sub
End Class
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan