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;
}

原文地址:https://www.cnblogs.com/xuqiulin/p/10182926.html

时间: 2024-10-10 08:15:34

windows程序设计 获取磁盘容量的相关文章

C# 获取磁盘容量

原文:C# 获取磁盘容量 /// 获取指定驱动器的空间总大小(单位为B) /// </summary> /// <param name="str_HardDiskName">只需输入代表驱动器的字母即可 </param> /// <returns> </returns> public static long GetHardDiskSpace(string str_HardDiskName) { long totalSize=

使用HD/IDE层的ioctl接口获取磁盘容量get_hdd_max_sector

利用HD/IDE layer的ioctl函数接口获取HD/IDE的磁盘容量.HDIO_DRIVE_TASK  能发出访问LBA地址的命令,但不能读写数据. #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <linux/hdreg.h> #include <linux/types.h> #include <

获取磁盘容量方法 C#/C++

C#方法 string driveName = "C:\\"; System.IO.DriveInfo[] drivers = System.IO.DriveInfo.GetDrives(); foreach (var drive in drivers) { if (driveName == drive.Name) Console.WriteLine(drive.TotalFreeSpace / (1024 * 1024 * 1024 * 1.0f) + "G");

windows程序设计 获取系统文件路径

获取系统文件路径,打印到txt文件中. #include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { //文件句柄 HANDLE hFile; DWORD dwWritten; //字符数组,用于存储系统目录 CHAR szSystemDir[MAX_PATH]; //获取系统目录 GetSystemDirector

windows程序设计获取文本框(窗口、对话框)文本

就是这样一个简单的界面,窗口上重绘的对话框(这种写法参考我之前博文): 需要做到的就是点击确定,获取文本框中内容. // 处理对话框消息 INT_PTR CALLBACK NewDlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) { int ret_num; HWND hwnd; WCHAR buff[32]; switch (msg) { case WM_COMMAND: { switch(LOWORD(wParam)) { c

Qt获取电脑磁盘容量

项目中用到了监测某磁盘(如:C盘.D盘等)的总容量和可用容量,查了一下,发现其实挺简单,调用一个Windows自带的API:GetDiskFreeSpaceEx( ... )就可以解决.用Qt做了一个测试例子,如下所示.??另:测试发现,如果给定路径不存在(如程序中"F:\"),则获取不到信息:通常给定用以获取磁盘容量信息的路径为"C:\"."D:\"等,但给定已存在路径(如程序中"D:\Test"),同样可以获取到该路径所属

Windows Azure Virtual Machine (29) 修改Azure VM 数据磁盘容量

<Windows Azure Platform 系列文章目录> 当我们使用Windows Azure管理界面,创建Azure虚拟机的时候,默认挂载的磁盘是固定大小的 1.比如我创建1个Windows Server虚拟机 2.需要挂载额外的数据磁盘,一开始我初始化数据磁盘的容量为500G 3.经过一段时间以后,500GB容量不够了,我需要将这块数据磁盘扩容 注意:Azure A系列和D系列的虚拟机,磁盘容量是用多少算多少.比如我们挂载了1TB的数据磁盘,但是实际只使用1GB的存储空间. 微软只会

VMware Workstation 12 增加磁盘容量 Windows Server 2012 系统 扩展

1.安装虚拟机后,检查C盘容量大小,发现C盘现在的空间是59.9GB,如下图: 2.使用window+R键,出现运行窗口,输入'cmd'-->'cd C:\Program Files (x86)\VMware\VMware Workstation',回车键,进入该路径. 3.在命令提示符后输入"vmware-vdiskmanager",无任何参数,按回车键.可以看到该命令的所有参数说明. 4.参考说明,执行类似下面的命令:vmware-vdiskmanager -x 80Gb 参

VMware Workstation 12 增加磁盘容量 Windows Server 2012 系统

1.安装虚拟机后,检查C盘容量大小,发现C盘现在的空间是59.9GB,如下图: 2.使用window+R键,出现运行窗口,输入'cmd'-->'cd C:\Program Files (x86)\VMware\VMware Workstation',回车键,进入该路径. 3.在命令提示符后输入"vmware-vdiskmanager",无任何参数,按回车键.可以看到该命令的所有参数说明. 4.参考说明,执行类似下面的命令:vmware-vdiskmanager -x 80Gb 参