一、GetLogicalDriveStrings()遍历卷
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#define BUFSIZE 1024
int main(){
CHAR szLogicalDriveStrings[BUFSIZE];//定义一个字符串
PCHAR szDrive;
ZeroMemory(szLogicalDriveStrings,BUFSIZE);//字符串清零
GetLogicalDriveStrings(BUFSIZE-1,szLogicalDriveStrings);//执行后所有数据都在szLogicalDriveStrings
//szLogicalDriveStrings的格式为C:\\0D:\\0E:\\0\0,printf遇到\0便停止读取,所以直接printf只能输出第一个字符串
//下面通过循环取出全部字符串
szDrive = (PCHAR)szLogicalDriveStrings;//取出szLogicalDriveStrings的指针
do
{
printf("%s\n",szDrive);//输出指针位置的字符串
szDrive+=(lstrlen(szDrive)+1);//每次循环指针向后增长,指向下一个字符
}while(*szDrive !='\x00');
system("pause");
return 0;
}
二、遍历设备名
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#define BUFSIZE 1024
int main(){
TCHAR buf[BUFSIZE];
HANDLE hvOL;
bool bFlag;
//FindNextVolume();
hvOL=FindFirstVolume(buf,BUFSIZE);
if(hvOL==INVALID_HANDLE_VALUE){
printf("%s\n","没有找到任何卷");//输出指针位置的字符串
return -1;
}
//输出
printf("%s\n",buf);//输出指针位置的字符串为设备名格式 \\?\Volume{869eafc0-a2b7-11ec-a2e2-806e6f6e6963}
while(FindNextVolume(hvOL,buf,BUFSIZE)){
printf("%s\n",buf);//输出指针位置的字符串为设备名格式 \\?\Volume{869eafc0-a2b7-11ec-a2e2-806e6f6e6963}
};
bFlag=FindVolumeClose(hvOL);//关闭句柄
system("pause");
return bFlag;
}
|