Win32 C++ 实现:获取硬盘分区信息及磁盘空间

在Win32环境下使用C++获取硬盘分区信息,可以利用Windows API来实现。一个常用的方法是使用GetLogicalDrives函数来获取逻辑驱动器的位掩码,然后结合GetDriveTypeGetDiskFreeSpaceEx等函数来获取每个驱动器的详细信息。

图片[1]_Win32 C++ 实现:获取硬盘分区信息及磁盘空间_知途无界

下面是一个简单的示例代码,展示了如何获取硬盘分区信息:

#include <iostream>
#include <windows.h>
#include <winioctl.h>

void ListDriveInfo() {
    DWORD drives = GetLogicalDrives();
    if (drives == 0) {
        std::cerr << "Failed to get logical drives." << std::endl;
        return;
    }

    char driveLetter = 'A';
    for (DWORD i = 0; i < 26; ++i) {
        if (drives & (1 << i)) {
            std::string driveString = std::string(1, driveLetter + i) + ":\\";
            UINT driveType = GetDriveType(driveString.c_str());

            std::cout << "Drive " << driveString << " is of type ";
            switch (driveType) {
                case DRIVE_UNKNOWN:     std::cout << "UNKNOWN"; break;
                case DRIVE_NO_ROOT_DIR: std::cout << "NO_ROOT_DIR"; break;
                case DRIVE_REMOVABLE:   std::cout << "REMOVABLE"; break;
                case DRIVE_FIXED:       std::cout << "FIXED"; break;
                case DRIVE_REMOTE:      std::cout << "REMOTE"; break;
                case DRIVE_CDROM:       std::cout << "CDROM"; break;
                case DRIVE_RAMDISK:     std::cout << "RAMDISK"; break;
                default:                std::cout << "INVALID"; break;
            }
            std::cout << std::endl;

            // Get additional information like total size and free space
            if (driveType == DRIVE_FIXED || driveType == DRIVE_REMOVABLE) {
                ULARGE_INTEGER freeBytesAvailable, totalBytes, freeBytes;
                if (GetDiskFreeSpaceEx(driveString.c_str(), &freeBytesAvailable, &totalBytes, &freeBytes)) {
                    std::cout << "  Total size: " << totalBytes.QuadPart / (1024 * 1024 * 1024) << " GB" << std::endl;
                    std::cout << "  Free space: " << freeBytes.QuadPart / (1024 * 1024 * 1024) << " GB" << std::endl;
                } else {
                    std::cerr << "  Failed to get disk space information." << std::endl;
                }
            }
        }
    }
}

int main() {
    ListDriveInfo();
    return 0;
}

代码解释:

  1. GetLogicalDrives: 这个函数返回一个位掩码,表示当前系统中存在的逻辑驱动器。每个位对应一个驱动器字母,从’A’到’Z’。
  2. GetDriveType: 通过传入一个驱动器路径(例如 “C:\”),可以获取该驱动器的类型,如固定磁盘、可移动磁盘、光盘驱动器等。
  3. GetDiskFreeSpaceEx: 这个函数用于获取指定驱动器上的可用空间、总空间和空闲空间的信息。结果以字节为单位返回,通常需要转换为更友好的单位(如GB)。

注意事项:

  • 确保在项目中链接了必要的库,如kernel32.lib,通常默认配置中已经包含。
  • 这个示例只在Windows平台上有效,因为它依赖于Windows特定的API。
  • 如果需要更详细的信息,比如文件系统类型、卷标等,可以使用更高级的API,如GetVolumeInformation

运行这个程序后,它将输出当前系统中每个逻辑驱动器的类型和基本的磁盘空间信息。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞64 分享
Every dog has its day.
风水轮流转
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容