• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
爱白菜的小昆虫
博客园    首页    新随笔    联系   管理    订阅  订阅

windows程序设计 获取磁盘容量

//磁盘分区的总容量(字节)=总簇数*每簇扇区数*每扇区字节数
//磁盘分区的空闲空间(字节)=空闲簇数*每簇扇区数*每扇区字节数
BOOL GetDiskFreeSpace(
    LPCTSTR lpRootPathName,//指向所要获取磁盘空间信息的磁盘分区根路径字符串
    LPDWORD lpSectorsPerCluster,//指向存储每簇扇区数的DWORD类型变量
    LPDWORD lpBytesPerSector,//指向存储每扇区字节数的DWORD类型变量
    LPDWORD lpNumberOfFreeClusters,//指向存储空闲簇的DWORD类型变量
    LPDWORD lpTotalNumberOfClusters//指向存储总簇数的DWORD类型变量
    );

 

/* **************************************************************
 * BOOL GetDiskFreeSpaceEx
 * 功能:
 *  获取用户可用的空闲空间字节数、空闲空间的字节数、磁盘总容量的字节数
 * 参数:
 *  LPCTSTR lpDirectoryName
 *   指向所要获取磁盘空闲信息的磁盘分区根路径字符串
 *  PULARGE_INTEGER lpFreeBytesAvailable
 *   指向用于存储可获得的总字节数量的变量,用户实际可用的空闲空间
 *  PULARGE_INTEGER lpTotalNumberOfBytes
 *   指向存储磁盘空间总字节数据的变量
 *  PULARGE_INTEGER lpTotalNUmberOfFreeBytes
 *   指向存储磁盘空闲空间总字节的变量
 * 返回值:
 *  返回BOOL值,表示信息获取是否成功
 ***************************************************************/
BOOL GetDiskFreeSpaceEx(
    LPCTSTR lpDirectoryName,//指向所要获取磁盘空闲信息的磁盘分区根路径字符串
    PULARGE_INTEGER lpFreeBytesAvailable,//指向用于存储可获得的总字节数量的变量
    PULARGE_INTEGER lpTotalNumberOfBytes,//指向存储磁盘空间总字节数据的变量
    PULARGE_INTEGER lpTotalNUmberOfFreeBytes//指向存储磁盘空闲空间总字节的变量
    );

代码演示

#include <windows.h>
#include <stdio.h>


/* **********************************************************************
 * BOOL GetDiskSpaceInfo(LPCSTR pszDrive)
 * 功能:根据输入的驱动器,获取磁盘总容量、空闲空间、簇数量等磁盘信息
 * 参数:驱动器根路径,比如:“D:\”
 ***********************************************************************/
BOOL GetDiskSpaceInfo(LPCSTR pszDrive)
{
    DWORD64 qwFreeBytesToCaller, qwTotalBytes, qwFreeBytes;
    DWORD dwSectPerClust, dwBytesPerSect, dwFreeClusters, dwTotalClusters;
    BOOL bResult;

    printf("%s\n", pszDrive);

    //使用GetDiskFreeSpaceEx获取磁盘信息并打印结果
    bResult = GetDiskFreeSpaceExA(
        pszDrive,
        (PULARGE_INTEGER)&qwFreeBytesToCaller,
        (PULARGE_INTEGER)&qwTotalBytes,
        (PULARGE_INTEGER)&qwFreeBytes
        );
    if(bResult)
    {
        printf("使用GetDiskFreeSpaceEx获取磁盘空间信息\n");
        printf("可获得的空闲空间(字节):\t%I64d\n", qwFreeBytesToCaller);
        printf("空闲空间(字节):\t\t%I64d\n", qwFreeBytes);
        printf("磁盘总容量(字节):\t\t%I64d\n", qwTotalBytes);
    }
    //使用GetDiskFreeSpace获取磁盘信息并打印结果
    bResult = GetDiskFreeSpaceA(
        pszDrive,
        &dwSectPerClust,
        &dwBytesPerSect,
        &dwFreeClusters,
        &dwTotalClusters
        );
    if(bResult)
    {
        printf("\n使用GetDiskFreeSpace获取磁盘空间信息\n");
        printf("空闲的簇数量:\t\t%d\n", dwFreeClusters);
        printf("总簇数量:\t\t%d\n", dwTotalClusters);
        printf("每簇的扇区数量:\t%d\n", dwSectPerClust);
        printf("每扇区的容量(字节):\t%d\n", dwBytesPerSect);
        printf("空闲空间(字节):\t%I64d\n",(DWORD64)dwFreeClusters*(DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect);
        printf("磁盘总容量(字节):\t%I64d\n",(DWORD64)dwTotalClusters*(DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect);
    }
    return bResult;
}

int main(void)
{
    GetDiskSpaceInfo("c:");
    return 0;
}

 

posted @ 2018-12-27 08:08  爱白菜的小昆虫  阅读(1113)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3