[Windows]_[获取磁盘盘符,类型和容量]

本文介绍了一个使用C++实现的程序,用于获取计算机上的磁盘信息,包括盘符、类型和容量。通过调用Windows API函数,程序能够遍历所有可移动和固定磁盘,并打印出其相关信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


场景:

1.有时候要对磁盘进行扫描操作,比如一些系统软件需要知道磁盘的信息。这时候就需要获取磁盘的盘符,类型和容量。


文件test_usb.cpp

#include <stdio.h>
#include <stdint.h>
#include <windows.h>
#include <iostream>

using namespace std;

void TestDrive()
{
	cout << "TestDrive" << endl;
	char* lpDrives = (char*)malloc(MAX_PATH*sizeof(char));
	memset(lpDrives,0,MAX_PATH*sizeof(char));

    DWORD dwLen = ::GetLogicalDriveStringsA(MAX_PATH, lpDrives);
	cout << "dwLen: " << dwLen << endl;

    DWORD driver_number = dwLen / 4;
	cout << "driver_number: " << driver_number << endl;

    string driver;
	LPTSTR start;
    for(DWORD nIndex = 0; nIndex < driver_number; nIndex++)
    {
		start = lpDrives + nIndex * 4;
		cout << "........................................." << endl;
		driver.append(start);
		cout << "lpDrives + nIndex * 4: " << lpDrives + nIndex * 4 << endl;
		cout << "DRIVE_REMOVABLE: " << DRIVE_REMOVABLE << endl;
		cout << "::GetDriveType(lpDrives + nIndex * 4): " << ::GetDriveType(lpDrives + nIndex * 4) << endl;
		if(::GetDriveType(start) == DRIVE_REMOVABLE)
        {
			driver.append(start);
			if( GetVolumeInformation(start,0,0,0,0,0,0,0) ) //判断驱动是否准备就绪
			{
				cout << "驱动准备就绪 " << endl;
			}
        }
		uint64_t lpFreeBytesAvailable = 0;
		uint64_t lpTotalNumberOfBytes = 0;
		uint64_t lpTotalNumberOfFreeBytes = 0;
		GetDiskFreeSpaceExA(lpDrives + nIndex * 4,(PULARGE_INTEGER)&lpFreeBytesAvailable,
			(PULARGE_INTEGER)&lpTotalNumberOfBytes,(PULARGE_INTEGER)&lpTotalNumberOfFreeBytes);
		cout << "lpFreeBytesAvailable: " << lpFreeBytesAvailable << endl;
		cout << "lpTotalNumberOfBytes: " << lpTotalNumberOfBytes << endl;
		cout << "lpTotalNumberOfFreeBytes: " << lpTotalNumberOfFreeBytes << endl;
    }
	cout << "driver: " << driver << endl;
}

int main(int argc, char *argv[])
{
	//TestWchar();
	TestDrive();
	
	return 0;
}


输出:

---------- CompileLinkRun ----------
TestDrive
dwLen: 24
driver_number: 6
.........................................
lpDrives + nIndex * 4: C:\
DRIVE_REMOVABLE: 2
::GetDriveType(lpDrives + nIndex * 4): 3
lpFreeBytesAvailable: 12637241344
lpTotalNumberOfBytes: 159210532864
lpTotalNumberOfFreeBytes: 12637241344
.........................................
lpDrives + nIndex * 4: D:\
DRIVE_REMOVABLE: 2
::GetDriveType(lpDrives + nIndex * 4): 5
lpFreeBytesAvailable: 0
lpTotalNumberOfBytes: 0
lpTotalNumberOfFreeBytes: 0
.........................................
lpDrives + nIndex * 4: E:\
DRIVE_REMOVABLE: 2
::GetDriveType(lpDrives + nIndex * 4): 4
lpFreeBytesAvailable: 12637241344
lpTotalNumberOfBytes: 159210532864
lpTotalNumberOfFreeBytes: 12637241344
.........................................
lpDrives + nIndex * 4: F:\
DRIVE_REMOVABLE: 2
::GetDriveType(lpDrives + nIndex * 4): 3
lpFreeBytesAvailable: 52076490752
lpTotalNumberOfBytes: 160000000000
lpTotalNumberOfFreeBytes: 52076490752
.........................................
lpDrives + nIndex * 4: G:\
DRIVE_REMOVABLE: 2
::GetDriveType(lpDrives + nIndex * 4): 5
lpFreeBytesAvailable: 0
lpTotalNumberOfBytes: 0
lpTotalNumberOfFreeBytes: 0
.........................................
lpDrives + nIndex * 4: H:\
DRIVE_REMOVABLE: 2
::GetDriveType(lpDrives + nIndex * 4): 2
驱动准备就绪 
lpFreeBytesAvailable: 3812806656
lpTotalNumberOfBytes: 3860234240
lpTotalNumberOfFreeBytes: 3812806656
driver: C:\D:\E:\F:\G:\H:\H:\

Output completed (4 sec consumed) - Normal Termination


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白行微

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值