Windows平台下使用C++检测硬盘分区是否属于SSD硬盘的方法
#include <iostream> #include <windows.h> #include <tchar.h> #include <string> #include <cassert> typedef std::basic_string<TCHAR> StringT; bool IsDriveSSD(const StringT& driveName) { assert(driveName.size()>=2); HANDLE hDevice = CreateFile((_T("\\\\.\\") + driveName.substr(0, 2)).c_str(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hDevice == INVALID_HANDLE_VALUE) { return false; } STORAGE_PROPERTY_QUERY query{}; query.PropertyId = StorageDeviceSeekPenaltyProperty; query.QueryType = PropertyStandardQuery; DWORD count; DEVICE_SEEK_PENALTY_DESCRIPTOR result{}; if (DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &result, sizeof(result), &count, nullptr)) { CloseHandle(hDevice); return !result.IncursSeekPenalty; } CloseHandle(hDevice); return false; } int main() { DWORD len = GetLogicalDriveStrings(0, NULL); if (len == 0) { return 0; } TCHAR* buffer = new TCHAR[len]; GetLogicalDriveStrings(len, buffer); for (TCHAR* drive = buffer; *drive; drive += _tcslen(drive) + 1) { // ULARGE_INTEGER freeBytesAvailable; // ULARGE_INTEGER totalNumberOfBytes; // ULARGE_INTEGER totalNumberOfFreeBytes; // if (GetDiskFreeSpaceEx(drive, &freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes)) { #if UNICODE #define _tcout std::wcout #else #define _tcout std::cout #endif _tcout << drive << _T(" ") << (IsDriveSSD(drive)?_T("True") : _T("False")) << std::endl; } } delete[] buffer; return 0; }
输出:
C:\ True
D:\ False
E:\ False
F:\ False
G:\ True
H:\ True
I:\ True
分类:
C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)