曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4289|回复: 0
打印 上一主题 下一主题

[文件与IO] GetDiskFreeSpace() -- 获取磁盘容量信息

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2012-2-14 13:50:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GetDiskFreeSpace() 原型如下:
[C++] 纯文本查看 复制代码
BOOL WINAPI GetDiskFreeSpace(
  __in   LPCTSTR lpRootPathName,
  __out  LPDWORD lpSectorsPerCluster,
  __out  LPDWORD lpBytesPerSector,
  __out  LPDWORD lpNumberOfFreeClusters,
  __out  LPDWORD lpTotalNumberOfClusters
);

该函数用来获取磁盘分区容量信息。它用磁盘分区的根路径作为输入,而后获得磁盘簇的总数量,空闲蔟数量,每蔟的扇区数,每扇区的字节数等磁盘容量信息,这些信息都存储在函数的几个参数中。函数参数说明如下:

第 1 个参数 lpRootPathName 表示磁盘分区的根路径。

第 2 个参数 lpSectorsPerCluster 表示每蔟的扇区数。

第 3 个参数 lpBytesPerSector 表示每扇区的字节数。

第 4 个参数 lpNumberOfFreeClusters 表示空闲的蔟数量。

第 5 个参数 lpTotalNumberOfClusters 表示该磁盘分区的总蔟数。

测试代码
[C++] 纯文本查看 复制代码
#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "chs");

    BOOL bResult;
    DWORD dwSectorsPerCluster, dwBytePerSector, dwNumberOfFreeClusters, dwTotalNumberOfClusters;

    bResult = GetDiskFreeSpace (argv[1], &dwSectorsPerCluster, &dwBytePerSector, &dwNumberOfFreeClusters, &dwTotalNumberOfClusters);
    if (bResult) {
        _tprintf (TEXT("\n ==== %s 盘空间信息 ==== \n"), argv[1]);
        _tprintf (TEXT("总的簇数量:\t\t%d\n"), dwTotalNumberOfClusters);
        _tprintf (TEXT("空闲的簇数量:\t\t%d\n"), dwNumberOfFreeClusters);
        _tprintf (TEXT("每簇扇区数:\t\t%d\n"), dwSectorsPerCluster);
        _tprintf (TEXT("每扇区字节数:\t\t%d\n"), dwBytePerSector);
        
        _tprintf (TEXT("磁盘分区总容量(GB):\t\t%.1f GB\n"), (double)((DWORD64)dwTotalNumberOfClusters * (DWORD64)dwSectorsPerCluster * (DWORD64)dwBytePerSector)/(1024*1024*1024) );
        _tprintf (TEXT("空闲空间容量(GB):\t\t%.1f GB\n"), (double)((DWORD64)dwNumberOfFreeClusters * (DWORD64)dwSectorsPerCluster * (DWORD64)dwBytePerSector)/(1024*1024*1024) );
    }
    return 0;
}

运行输出:
D:\WinAPI\DiskSpace\Debug>DiskSpace.exe E:\

==== E:\ 磁盘空间信息 ====
总的簇数量:            89345023
空闲的簇数量:          22617770
每簇扇区数:            8
每簇扇字节数:          512
磁盘分区总容量(GB):            340.8 GB
空闲空间容量(GB):              86.3 GB

D:\WinAPI\DiskSpace\Debug>DiskSpace.exe D:\

==== D:\ 盘空间信息 ====
总的簇数量:            122724095
空闲的簇数量:          92773530
每簇扇区数:            8
每簇扇字节数:          512
磁盘分区总容量(GB):            468.2 GB
空闲空间容量(GB):              353.9 GB



蔟简单的说就是一组扇区,如下图所示:


在新的程序中,可以 GetDiskFreeSpaceEx() 函数来取代 GetDiskFreeSpace() ,它可以表示约 16777216TB 的容量,是后者的扩展版本。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 23:24 , Processed in 0.079369 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表