头文件
#pragma once
#include <iostream>
#include <Windows.h>
#include <vector>
#include <string>using namespace std;
int getmemoryInfo();
cpp文件
#include "memory.h"
int getmemoryInfo() {
char lpBuffer[100] = { 0 }; // 缓冲区
GetLogicalDriveStringsA(100, lpBuffer); // 获取驱动器列表std::vector<std::string> driveNames; // 保存驱动器名称
char* p = lpBuffer; // 指向缓冲区
while (*p) {
std::string driveName = p;
if (GetDriveTypeA(driveName.c_str()) == DRIVE_FIXED) { // 仅处理固定磁盘驱动器
driveNames.push_back(driveName);
}
p += driveName.length() + 1; // 指向下个驱动器
}// 输出每个驱动器的信息
for (const auto& driveName : driveNames) {
char volumeNameBuffer[MAX_PATH] = { 0 }; // 卷名缓冲区
char fileSystemNameBuffer[MAX_PATH] = { 0 }; // 文件系统名称缓冲区
DWORD serialNumber = 0; // 扇区序列号
DWORD maxComponentLength = 0; // 文件名大小写敏感标记
DWORD fileSystemFlags = 0; // 文件系统标记
if (!GetVolumeInformationA(driveName.c_str(), volumeNameBuffer, MAX_PATH, &serialNumber,
&maxComponentLength, &fileSystemFlags, fileSystemNameBuffer, MAX_PATH)) {
std::cerr << "Failed to get information of drive " << driveName << std::endl;
continue;
}DWORDLONG totalSpace = 0; // 磁盘总空间
DWORDLONG freeSpace = 0; // 磁盘可用空间
DWORDLONG totalFreeSpace = 0; // 磁盘总可用空间
if (!GetDiskFreeSpaceExA(driveName.c_str(), (PULARGE_INTEGER)&freeSpace,
(PULARGE_INTEGER)&totalSpace, (PULARGE_INTEGER)&totalFreeSpace)) {
std::cerr << "Failed to get disk space info of drive " << driveName << std::endl;
continue;
}
std::cout << "Drive name: " << driveName << std::endl;
std::cout << "Volume name: " << volumeNameBuffer << std::endl;
std::cout << "File system: " << fileSystemNameBuffer << std::endl;
std::cout << "Type: " << GetDriveTypeA(driveName.c_str()) << std::endl;
std::cout << "Total space: " << (double)totalSpace / 1024 / 1024 / 1024 << " GB" << std::endl;
std::cout << "Free space: " << (double)freeSpace / 1024 / 1024 / 1024 << " GB" << std::endl << std::endl;
}
return 0;
}