在Win32环境下使用C++获取硬盘分区信息,可以利用Windows API来实现。一个常用的方法是使用GetLogicalDrives
函数来获取逻辑驱动器的位掩码,然后结合GetDriveType
和GetDiskFreeSpaceEx
等函数来获取每个驱动器的详细信息。
![图片[1]_Win32 C++ 实现:获取硬盘分区信息及磁盘空间_知途无界](https://zhituwujie.com/wp-content/uploads/2025/03/d2b5ca33bd20250314112505.png)
下面是一个简单的示例代码,展示了如何获取硬盘分区信息:
#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;
}
代码解释:
GetLogicalDrives
: 这个函数返回一个位掩码,表示当前系统中存在的逻辑驱动器。每个位对应一个驱动器字母,从’A’到’Z’。GetDriveType
: 通过传入一个驱动器路径(例如 “C:\”),可以获取该驱动器的类型,如固定磁盘、可移动磁盘、光盘驱动器等。GetDiskFreeSpaceEx
: 这个函数用于获取指定驱动器上的可用空间、总空间和空闲空间的信息。结果以字节为单位返回,通常需要转换为更友好的单位(如GB)。
注意事项:
- 确保在项目中链接了必要的库,如
kernel32.lib
,通常默认配置中已经包含。 - 这个示例只在Windows平台上有效,因为它依赖于Windows特定的API。
- 如果需要更详细的信息,比如文件系统类型、卷标等,可以使用更高级的API,如
GetVolumeInformation
。
运行这个程序后,它将输出当前系统中每个逻辑驱动器的类型和基本的磁盘空间信息。
© 版权声明
文中内容均来源于公开资料,受限于信息的时效性和复杂性,可能存在误差或遗漏。我们已尽力确保内容的准确性,但对于因信息变更或错误导致的任何后果,本站不承担任何责任。如需引用本文内容,请注明出处并尊重原作者的版权。
THE END
暂无评论内容