c++ (Q1):读取设备(PC)磁盘,查看状态
1. 背景:
项目有大量的数据需要存储,会挂载多块磁盘,在一块磁盘存储空间不足时自动变换到下一块磁盘存储(不要存在C盘)
2.代码:
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
/* 磁盘读取测试 */
//ULARGE_INTEGER nFreeBytesAvailable;
//ULARGE_INTEGER nTotalNumberOfBytes;
//ULARGE_INTEGER nTotalNumberOfFreeBytes;
//char test[3];
//char test_name[512];
/*TCHAR 宽窄字符切换*/
//TCHAR buf[MAX_PATH] = {}; //260
//GetLogicalDriveStrings(MAX_PATH, buf);
//TCHAR* pDrives = buf;
//while (*pDrives != 0) {
// pDrives += _tcslen (pDrives) + 1;
// for (int i=0; i<3; i++)
// {
// test[i] = pDrives[i];
// }
// test[3] = '\0';
// sprintf(test_name,"%s",test);
// cout<< test_name <<endl;
// if (*pDrives != 0 && GetDiskFreeSpaceEx(pDrives, &nFreeBytesAvailable, &nTotalNumberOfBytes, &nTotalNumberOfFreeBytes))
// {
// int a = (nTotalNumberOfBytes.QuadPart) / 1024 / 1024 / 1024;
// int b = (nFreeBytesAvailable.QuadPart) / 1024 / 1024 / 1024;
// cout<<" totalspace:"<< a <<" GB"; //磁盘总容量
// cout<<" freespace:"<< b <<" GB"<<endl; //磁盘剩余空间
// }
//}
//system("pause");
//return 0;
/* 磁盘切换逻辑实现 */
ULARGE_INTEGER nFreeBytesAvailable;
ULARGE_INTEGER nTotalNumberOfBytes;
ULARGE_INTEGER nTotalNumberOfFreeBytes;
char test[3];
char test_name[512];
TCHAR buf[MAX_PATH] = {}; //260
GetLogicalDriveStrings(MAX_PATH, buf);
TCHAR* pDrives = buf;
while (*pDrives != 0) {
//跳过C盘的检查
pDrives += _tcslen (pDrives) + 1;
//
if (*pDrives != 0 && GetDiskFreeSpaceEx(pDrives, &nFreeBytesAvailable, &nTotalNumberOfBytes, &nTotalNumberOfFreeBytes)){
//读取当前磁盘的剩余空间
int freespace = (nFreeBytesAvailable.QuadPart) / 1024 / 1024 / 1024;
if (freespace < 5){
continue;
}
else{
for (int i=0; i<3; i++){
test[i] = pDrives[i];
}
test[3] = '\0';
sprintf(test_name,"%s",test);
cout<< test_name <<endl;
break;
}
}
else{
cout<< "磁盘已满,请更换磁盘" <<endl;
}
}
//保持窗口不关闭
system("pause");
return 0;
}
3. 说明
注释掉的部分是磁盘读取的测试,后面没有注释掉的部分是本人大概功能的实现,其中test、test_name是个人需要,请需要的朋友自觉进食!
版权声明:本文为qiangbaa原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。