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

解决方案 »

  1.   

    '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 LongPrivate Sub Form_Load()
        'KPD-Team 1998
        'URL: http://www.allapi.net/
        'E-Mail: [email protected]    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
      

  2.   

    API察看工具:
    http://www.commacn.com/vbsworld/ExtFiles/api32.zip
    343KB
    Win32 API帮助文件(中文版)http://202.99.172.24/down/swinapi.zip ←Copy它的
    822KB
    可以完全取代VB自带的API文本浏览器。软件中所有函数原型均取自于Win32api.txt.并且提供1543个函数的详细的中文说明,包括说明、返回值、参数表。更重要的一点是提供438个真正完整的VB实例供你参考。做为送给所有VB及Win32API编程爱好者的礼物献给大家。http://www.dapha.net/soure/api/allapi.zip
    3981KB
    它是一套学习Api函数不可缺少的软件,内置api流览器
      

  3.   

    各位,下面的代码有何错误,我装的是windows 2000/98双系统,在不同的操作系统得到的结果不同,问题出在那里?Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As LongPublic Function GetDiskSpace(ByVal Path As String) As long
    Dim aa As Long, SecPerClust As Long, BytePerSec As Long, FreeClust As Long, totClust As Long
    aa = GetDiskFreeSpace(Path, SecPerClust, BytePerSec, FreeClust, totClust)
    GetTotalSpace = SecPerClust * BytePerSec * totClust
    End Function
      

  4.   

    改成这样试试:
    Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As LongPublic Function GetDiskSpace(ByVal Path As String) As Double
        Dim aa As Long
        Dim SecPerClust As Long, BytePerSec As Long, FreeClust As Long, totClust As Long
        
        aa = GetDiskFreeSpace(Path, SecPerClust, BytePerSec, FreeClust, totClust)
        
        GetTotalSpace = CDbl(SecPerClust) * BytePerSec * totClust
        
    End Function
      

  5.   

    to:zyl910
    问题不是出在最后的乘法运算,而是GetDiskFreeSpace得出的SecPerClust和totClust在98和2000下的值不同,真是奇怪。
      

  6.   

    那是由于系统不同。
    去问 Bill·Gates(比尔·该死)!
      

  7.   

    正确的代码:Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" _
        Alias "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, _
        lpFreeBytesAvailableToCaller As Currency, _
        lpTotalNumberOfBytes As Currency, _
        lpTotalNumberOfFreeBytes As Currency) As LongPrivate Function GetDiskSpace() As String
    Dim Status As Long, TotalBytes As Currency, FreeBytes As Currency, BytesAvailableToCaller As Currency
    Status = GetDiskFreeSpaceEx("c:\", BytesAvailableToCaller, TotalBytes, FreeBytes)
    GetDiskSpace = Format(TotalBytes * 10000, "###0")
    GetDiskSpace = GetDiskSpace & GetDiskSpace & GetDiskSpace
    End Function