文件的所占空间和文件大小之和为什么不同.txt
来自「VB技巧问答10000例 VB技巧问答10000例」· 文本 代码 · 共 32 行
TXT
32 行
实 际 上 字 节 并 不 是 保 存 文 件 的 最 小 单 元 。 操 作 系 统 将 硬 盘 划 分 为 若 干 个 簇 , 然 后 以 簇 作 为 最 小 单 位 保 存 文 件 。 每 个 簇 的 大 小 因 为 操 作 系 统 和 分 区 大 小 而 不 同 。 例 如 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
<END>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?