GetDiskFreeSpace VB声明 
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 
说明 
获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量 
返回值 
Long,非零表示成功,零表示失败。会设置GetLastError 
参数表 
参数 类型及说明 
lpRootPathName String,不包括卷名的一个磁盘根路径 
lpSectorsPerCluster Long,用于装载一个簇内扇区数的变量 
lpBytesPerSector Long,用于装载一个扇区内字节数的变量 
lpNumberOfFreeClusters Long,用于装载磁盘上剩余簇数的变量 
lpTtoalNumberOfClusters Long,用于装载磁盘上总簇数的变量 
注解 
在采用FAT16格式的windows95系统中,如一个驱动器(分区)的容量超过了2GB,则不应使用这个函数。此时,这个函数能识别的最大分区容量只有2GB
 

解决方案 »

  1.   

    看看这个
    http://edu.yn.cninfo.net/T_examination/news/14/01-4-6/news_4751_0.shtml
      

  2.   

    212、如何求出磁盘大小及剩余空间大小 (含大于 2GB 的正确算法);在问题:如何求出磁盘大小及剩余空间大小
    我们使用了 GetDiskFreeSpace API 来求出磁盘大小及剩余空间大小,
    在问题:如何求出磁盘大小及剩余空间大小 (更简单的 VB6 新功能)
    我们使用了 FileSystemObject 来求出磁盘大小及剩余空间大小,如果网友自己曾经实际测试过这二个主题的程序码,而您的硬盘又大于 2GB 时,或许您会发现,只要大于 2GB 的部份都无法正确的显示!为什么会这样呢?这是因为目前 VB 只支持到 32 位的 Integer 资料型态,所以最大值就是 2GB!要解决这个问题,您必须改用另一个 API GetDiskFreeSpaceEx,不过,在这个 API 中,有使用了一个新的 ULARGE_INTEGER Structure,所以在声明 GetDiskFreeSpaceEx API 之前,您也必须要先声明 ULARGE_INTEGER Type:Type ULARGE_INTEGER
    LowPart As Long
    HighPart As Long
    End TypeDeclare Function GetDiskFreeSpaceEx Lib "kernel32.dll" _
    Alias "GetDiskFreeSpaceExA" _
    (ByVal lpDirectoryName As String, _ ´目录名称或磁盘代码
    lpFreeBytesAvailableToCaller As ULARGE_INTEGER, _ ´剩余可用空间大小 (Bytes)
    lpTotalNumberOfBytes As ULARGE_INTEGER, _ ´磁盘总空间大小 (Bytes)
    lpTotalNumberOfFreeBytes As ULARGE_INTEGER) As Long ´剩余总空间大小 (Bytes)ULARGE_INTEGER Structure 是一个 VB 预设中尚未支持的 64 位的 Integer,它的范围是从 &H0 到 &HFFFFFFFFFFFFFFFF (也就是 2 的 64 次方),它可用于所有尚未支持 64 位的 Integer 的程序语言中。它将 64 位的值切割成二个 32 位的部份,也就是 LowPart 及 HighPart。如果那一天 VB 开始支持 64 位的 Integer 资料型态,ULARGE_INTEGER Structure 就用不到了,否则,您一定要记得声明!在模组中声明了上面的 Type ULARGE_INTEGER 及 GetDiskFreeSpaceEx API 之后,我们来看看以下的范例程序: 
    Source Code 下载Private Sub Command1_Click()
    Dim userbytes As ULARGE_INTEGER ´ 目前 User 可用磁盘空间
    Dim totalbytes As ULARGE_INTEGER ´ 磁盘总空间
    Dim freebytes As ULARGE_INTEGER ´ 磁盘剩余总空间
    Dim retval As Long ´ GetDiskFreeSpaceEx 的返回值If Text1.Text = "" Then Text1.Text = "C"
    retval = GetDiskFreeSpaceEx(Text1.Text & ":\", userbytes, totalbytes, freebytes)
    ´
    If userbytes.LowPart 〈 0 Then
    User 可用磁盘空间 = Format((userbytes.HighPart * (16 ^ 8)) + (userbytes.LowPart + (16 ^ 8)), "#,###")
    Else
    User 可用磁盘空间 = Format((userbytes.HighPart * (16 ^ 8)) + userbytes.LowPart, "#,###")
    End If
    ´
    If totalbytes.LowPart 〈 0 Then
    磁盘总空间 = Format((totalbytes.HighPart * (16 ^ 8)) + (totalbytes.LowPart + (16 ^ 8)), "#,###")
    Else
    磁盘总空间 = Format((totalbytes.HighPart * (16 ^ 8)) + totalbytes.LowPart, "#,###")
    End If
    ´
    If freebytes.LowPart 〈 0 Then
    磁盘剩余总空间 = Format((freebytes.HighPart * (16 ^ 8)) + (freebytes.LowPart + (16 ^ 8)), "#,###")
    Else
    磁盘剩余总空间 = Format((freebytes.HighPart * (16 ^ 8)) + freebytes.LowPart, "#,###")
    End If
    ´
    Text1.SelStart = 0
    Text1.SelLength = Len(Text1)
    End Sub
    注意:以上的功能有以下 OS 本身的限制Windows 95 必须在 OSR2 或以后的版本才行!
    Windows NT 必须在 4.0 以后的版本才行!
      

  3.   

    计算容量超过2GB磁盘剩余空间:
    Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency, lpTotalNumberOfFreeBytes As Currency) As Long  
    Public Sub GetFreeSpace(strDrv As String) 
    Dim r As Long 
    Dim BytesFreeToCalller As Currency 
    Dim TotalBytes As Currency 
    Dim TotalFreeBytes As Currency 
    Dim TotalBytesUsed As Currency 
    Call GetDiskFreeSpaceEx(strDrv, BytesFreeToCalller, TotalBytes, TotalFreeBytes) 
    MsgBox "Total Number of Bytes: " & Format$(TotalBytes * 10000,"###,###,###,##0") 
    MsgBox "Total Free Bytes: " & Format$(TotalFreeBytes * 10000,"###,###,###,##0") 
    MsgBox "Free Bytes Available: " & Format$(BytesFreeToCalller * 10000,"###,###,###,##0") 
    MsgBox "Total Space Used: " & Format$((TotalBytes - TotalFreeBytes) * 10000, "###,###,###,##0") 
    End Sub
      

  4.   

    GetDiskFreeSpaceEx VB声明 
    Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As LARGE_INTEGER, lpTotalNumberOfBytes As LARGE_INTEGER, lpTotalNumberOfFreeBytes As LARGE_INTEGER) As Long 
    说明 
    获取与一个磁盘的组织以及剩余空间容量有关的信息 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    lpRootPathName String,不包括卷名的磁盘根路径名 
    lpFreeBytesAvailableToCaller LARGE_INTEGER,指定一个变量,用于容纳调用者可用的字节数量 
    lpTotalNumberOfBytes LARGE_INTEGER,指定一个变量,用于容纳磁盘上的总字节数 
    lpTotalNumberOfFreeBytes LARGE_INTEGER,指定一个变量,用于容纳磁盘上可用的字节数 
    适用平台 
    Windows 95 OSR2,Windows NT 4.0 
    注解 
    LARGE_INTEGER结构与FILETIME结构在内部完全一致。正式调用前,用GetVersionEx判断函数是否得到了支持。在Windows 95 OSR2环境中,OSVERSIONINFO结构的dwBuildNumbe字段会大于1000
     Top