热情软件屋

 

文件的所占空间和文件大小之和为什么不同


编号:QA001940
建立日期: 1999年11月1日 最后修改日期:1999年11月1日
所属类别:

RSMTL:
    VB5
    win98
    您好,我想得到一个目录的所占空间,我发现并不是将所有的文件相加,请问用什么函数?谢谢

回答:

    实际上字节并不是保存文件的最小单元。操作系统将硬盘划分为若干个簇,然后以簇作为最小单位保存文件。每个簇的大小因为操作系统和分区大小而不同。例如Win9x/FAT16分区,如果分区小于512M,每个簇为8K;大于512M,每个簇为16K。如果一个文件为1K,那么在小于512M的分区,它占用8K;在大于512M的分区,它占用16K。大于一个文件,文件大小和占用空间之间的差距很小。但对于一个目录中的多个文件,这种差别可能非常大。所以你要是计算占用空间,先调用GetDiskFreeSpace获得磁盘的簇的大小。 然后利用文件大小除以簇的大小并将小数进位得到占用的簇数,然后再乘以簇的大小就可以获得获得文件占用的空间。
     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
    
     Private Type DiskInformation
     lpSectorsPerCluster As Long
     lpBytesPerSector As Long
     lpNumberOfFreeClusters As Long
     lpTotalNumberOfClusters As Long
     End Type
    
     Private Sub Command1_Click()
     Dim info As DiskInformation
     Dim lAnswer As Long
     Dim lpRootPathName As String
     Dim lpSectorsPerCluster As Long
     Dim lpBytesPerSector As Long
     Dim lpNumberOfFreeClusters As Long
     Dim lpTotalNumberOfClusters As Long
     Dim sString As String
    
     lpRootPathName = "c:\"
     lAnswer = GetDiskFreeSpace(lpRootPathName, lpSectorsPerCluster, _
     lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters)
     sString = "Number of per cluster : " & lpBytesPerSector * lpSectorsPerCluster
    
     MsgBox sString
     End Sub

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio