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 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qiangbaa/article/details/108725390