VB.NET 取磁盘容量信息

在本文中通过,“GetdiskFreeSpaceEx / 取磁盘空闲空间EX”获取到关于磁盘的容量信息

如“磁盘总容量”、“磁盘空闲容量”、“磁盘已用容量”、“调用方可用容量”,有必要著名下

调用方可用容量”与“磁盘空闲容量”两者近乎相同,但不代表完全相同 两者只是说反馈的

值相近或相同,不代表一定说含义完全等价、

函数示意:

GetdiskFreeSpaceEx 取磁盘空闲空间扩展,如果成功返回非0,否则返回0

lpRootPathName 欲取信息盘符根路径

lpFreeBytesAvailabletoCaller 调用方可用容量

lpTotalNumberOfBytes 磁盘总容量

lpTotalNumberOfFreeBytes 磁盘空闲容量

StrFormatByteSize64 格式化字符串(字节),成功返回真,否则返回假

qdw 64位二进制数据块

szBuf 字符缓冲区

uiBufSize 缓冲区尺寸

示例代码

Imports System.Runtime.InteropServices
Imports System.Text.RegularExpressions

Module MainModule

    Public Declare Function GetdiskFreeSpaceEx Lib "kernel32.dll" Alias "GetdiskFreeSpaceExA" (ByVal lpRootPathName As String,ByRef lpFreeBytesAvailabletoCaller As Long,ByRef lpTotalNumberOfBytes As Long,ByRef lpTotalNumberOfFreeBytes As Long) As Boolean

    Public Declare Function StrFormatByteSize64 Lib "shlwapi.dll" Alias "StrFormatByteSize64A" (ByVal qdw As Long,ByVal szBuf As String,ByVal uiBufSize As Integer) As Boolean

    Public Const NULL As Long = 0L

    Function GetTotaldiskSize(strRootPathName As String) As Long ' 取磁盘总容量
        Dim lngRsltSize As Long = NULL
        If (GetdiskFreeSpaceEx(strRootPathName,NULL,lngRsltSize,NULL)) Then
            Return lngRsltSize
        End If
        Throw New Exception("Unable to get toal disk size.")
    End Function

    Function GetFreediskSize(strRootPathName As String) As Long ' 取磁盘空闲容量
        Dim lngRsltSize As Long = NULL
        If (GetdiskFreeSpaceEx(strRootPathName,lngRsltSize)) Then
            Return lngRsltSize
        End If
        Throw New Exception("Unable to get free disk size.")
    End Function

    Function GetUseddiskSpace(strRootPathName As String) As Long ' 取已使用磁盘容量
        Dim lngRsltSize As Long = GetTotaldiskSize(strRootPathName) - GetFreediskSize(strRootPathName)
        If (lngRsltSize < 0) Then
            Throw New Exception("Unable to get used disk space.")
        End If
        Return lngRsltSize
    End Function

    Function GetAvailabletoCallerSize(strRootPathName As String) ' 取可用磁盘容量
        Dim lngRsltSize As Long = NULL
        If (GetdiskFreeSpaceEx(strRootPathName,NULL)) Then
            Return lngRsltSize
        End If
        Throw New Exception("Unable to get available to caller size.")
    End Function

    Function StrFormatByteSize64(ByVal value As Long) As String
        Dim str = Space(64)
        If (StrFormatByteSize64(value,str,64) = False) Then
            Return 0
        End If
        Return str.TrimEnd()
    End Function

    Sub Main()
        Console.Title = "磁盘容量信息"
        Console.WriteLine("总容量:" + StrFormatByteSize64(GetTotaldiskSize("C:\")))
        Console.WriteLine("空闲容量:" + StrFormatByteSize64(GetFreediskSize("C:\")))
        Console.WriteLine("已用容量:" + StrFormatByteSize64(GetUseddiskSpace("C:\")))
        Console.WriteLine("可用容量:" + StrFormatByteSize64(GetAvailabletoCallerSize("C:\")))
        Console.ReadKey(False)
    End Sub

End Module

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...