学习《C/C++ Windows 程序设计》的第五天
编译环境:Window10 VS2019
学习目的:遍历本机硬盘盘符及属性并打印出来
涉及知识点:API函数[GetLogicalDriveStrings()|GetDriveType()|GetDiskFreeSpaceEx]、读取指针数据
1、GetLogicalDriveStrings():获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径
注意点: 1、第二个参数指向指针的首地址,每个盘符以\0结尾,最终衣蛾\0\0结尾;
2、成功返回实际所需要占的空间,不包含最终\0\0的大小,失败则返回0;
2、GetDriveType():确定磁盘驱动器的类型
3、 GetDiskFreeSpaceEx():获取一个磁盘分区的组织以及剩余空间容量有关的信息
实例代码:[遍历本机所有盘符,并输出所有盘符的相关信息]
#include <Windows.h>
#include <iostream>
#include <tchar.h>
using namespace std;
#pragma warning (disable:4996)
int main(int argc, char* argv[])
{
//获取需要存储盘符的实际空间,不包含\0\0
DWORD dwRet=GetLogicalDriveStrings(0, NULL);
//判断是否执行成功
if (dwRet != 0)
{
//定义存放缓冲区的大小,并分配一块内存空间
TCHAR* p_缓冲区数据 = new TCHAR(dwRet + 10);
//清空该部分内存空间,该函数的第二参数单位为字节
ZeroMemory(p_缓冲区数据, (dwRet + 10) * sizeof(TCHAR));
//获取实际数据
dwRet = GetLogicalDriveStrings(dwRet + 10, p_缓冲区数据);
//判断是否执行成功
if (dwRet != 0)
{
TCHAR* p_单个盘符 = p_缓冲区数据;
//do循环遍历
do
{
//p_缓冲区数据如果遇到盘符中\0,则条件不成立
if (*p_单个盘符)
{
wcout << p_单个盘符;
UINT n_盘符类型 = GetDriveType(p_单个盘符);
switch (n_盘符类型)
{
case DRIVE_UNKNOWN:
wcout << "未知的磁盘类型" << endl;
break;
case DRIVE_NO_ROOT_DIR:
wcout << "盘符无效" << endl;
break;
case DRIVE_REMOVABLE:
wcout << "可移动磁盘" << endl;
break;
case DRIVE_FIXED:
wcout << "固定磁盘" << endl;
break;
case DRIVE_REMOTE:
wcout << "网络磁盘" << endl;
break;
case DRIVE_CDROM:
wcout << "光驱" << endl;
break;
case DRIVE_RAMDISK:
wcout << "RAM" << endl;
break;
default:
break;
}
wcout << endl;
}
p_单个盘符 += _tcslen(p_单个盘符) + 1;
} while (*p_单个盘符);
}
dwRet = dwRet;
}
return 0;
}
调试问题:1、出现“获取本地盘符信息.exe 已触发了一个断点。”这个问题有哪位遇到过,帮忙解答一下,还未找到解决办法,有知道的能否帮忙解答一下。
2021年11月20日
|