博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows API 第 18篇 FindFirstVolume FindNextVolume
阅读量:6673 次
发布时间:2019-06-25

本文共 2695 字,大约阅读时间需要 8 分钟。

函数定义:

Retrieves the name of a volume on a computer. FindFirstVolume is used to begin scanning the volumes of a computer.

HANDLE WINAPI FindFirstVolume(                               _Out_ LPTSTR lpszVolumeName,                               _In_  DWORD  cchBufferLength                              ); 说明:      检索本机卷的名字,但这个名字是GUID(全局唯一标志符)路径的,可见卷的表示方法有好多种,不仅仅是我们平时所看到的C盘,D盘, 返回值:      成功返回一个有效的句柄,最后需要用FindVolumeClose函数关掉该句柄。失败返回INVALID_HANDLE_VALUE。 接着又一个函数: BOOL WINAPI FindNextVolume(                           _In_  HANDLE hFindVolume,                           _Out_ LPTSTR lpszVolumeName,                           _In_  DWORD  cchBufferLength                           ); 说明:     第一个参数就是用调用FindFirstVolume的返回句柄, 其它两个参数不多介绍了,     用这两个函数循环的遍历所有的可用卷。 下面写一个例子来输出这个GUID名称:
void main(){CHAR szVolume[MAX_PATH] = { 0 };HANDLE hVolume = FindFirstVolumeA(szVolume,MAX_PATH);if (INVALID_HANDLE_VALUE == hVolume)return 0;//string strVolume = szVolume;printf("%s \n", szVolume);while (FindNextVolumeA(hVolume, szVolume, MAX_PATH)){printf("%s \n", szVolume);}FindVolumeClose(hVolume);//别忘了关闭句柄}

 我的输出结果是这样的:

windows API 第 18篇 FindFirstVolume    FindNextVolume - Prairie - work labor and play

分析:

可见这些也代表着卷标的唯一标志,我的笔记本上是有五个驱动器,分别是C盘,D盘,E盘,F盘和CD ROM光驱H。这样也证实了这一说法。

 

接下来我们用GetDriveType函数拿上面的返回值测试一下看正确不。

The GetDriveType function determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or

network drive. //判断卷的类型

UINT GetDriveType(

LPCTSTR lpRootPathName // root directory

);

void main(){    UINT uGUIDType[5];    UINT uNameType[5];    int i = 0;    CHAR szVolume[MAX_PATH] = { 0 };    HANDLE hVolume = FindFirstVolumeA(szVolume,MAX_PATH);    if (INVALID_HANDLE_VALUE == hVolume)	return 0;    //string strVolume = szVolume;    //printf("%s \n", szVolume);    uGUIDType[i] = GetDriveTypeA(szVolume);    uNameType[i] = GetDriveTypeA("C:\\");    i++;    while (FindNextVolumeA(hVolume, szVolume, MAX_PATH))    {	//printf("%s \n", szVolume);	uGUIDType[i] = GetDriveTypeA(szVolume);	i++;    }    uNameType[1] = GetDriveTypeA("D:\\");    uNameType[2] = GetDriveTypeA("E:\\");    uNameType[3] = GetDriveTypeA("F:\\");    uNameType[4] = GetDriveTypeA("H:\\");    CHAR szResult[MAX_PATH] = { 0 };    sprintf_s(szResult, "uGUIDType:\t%d  %d  %d  %d  %d  \nuNameType:\t%d  %d  %d  %d  %d\n", uGUIDType[0], uGUIDType[1], uGUIDType[2], uGUIDType[3], uGUIDType[4], uNameType[0], uNameType[1], uNameType[2], uNameType[3], uNameType[4]);    printf("%s", szResult);}

 

这次查看结果:

windows API 第 18篇 FindFirstVolume    FindNextVolume - Prairie - work labor and play

可知那些奇怪的字符 \\?\Volume{fe04a021-a8fc-11e4-824b-806e6f6e6963}\和"C:\\"是一样的。

而这些数字代表什么呢?查看MSDN可得:

#define DRIVE_UNKNOWN 0

#define DRIVE_NO_ROOT_DIR 1
#define DRIVE_REMOVABLE 2
#define DRIVE_FIXED 3
#define DRIVE_REMOTE 4
#define DRIVE_CDROM 5
#define DRIVE_RAMDISK 6

 

转载于:https://www.cnblogs.com/priarieNew/p/9755394.html

你可能感兴趣的文章
spring-java项目中连接redis数据库
查看>>
优云APM最佳实践: 诊断平安城市视频网性能问题
查看>>
三层架构详解(服务员-厨师-采购员)
查看>>
fedora21之常用命令
查看>>
在CentOS上部署开源博客系统Blog_mini
查看>>
Socket网络编程(1)
查看>>
Eclipse 快捷键
查看>>
第一次使用IDEA遇到的问题
查看>>
DDD CQRS架构和传统架构的优缺点比较
查看>>
前端源码安全
查看>>
java二维数组的常见初始化
查看>>
关于开发WPF的一些感想
查看>>
UML介绍--用例图
查看>>
iOS 真机调试(史上最详细步骤解析,hmt精心打造)
查看>>
LVS三种模式与八种调度算法
查看>>
让定义的接口可读性更强
查看>>
WordPress上传含有中文文件出现乱码
查看>>
解析UIControl
查看>>
【MySQL】数据库字符校对规则
查看>>
分形几何算法和实现(C语言)
查看>>