驱动器是通过某个文件系统格式化并带有一个驱动器号的存储区域.存储区域可以是软盘、CD,硬盘或其他类型的磁盘.单击”Windows 资源管理器”或”我的电脑”中相应的图标可以查看驱动器的内容.
这里会用到三个函数:
一个是GetLogicalDrives, 调用后会返回DWORD的位掩码(bitmask)值,通过判断该DWORD位上1的数量可以获得系统内有多少个驱动器,(当然通过GetLogicalDriveStrings也可以获得系统内有多少个驱动器,我这个只是为了多介绍一个API函数而已)
一个是GetLogicalDriveStrings,先第一次调用获得LogicalDriveStrings的长度(很多API都有类似的调用),然后new一个这么大的TCHAR缓冲区来存放LogicalDriveStrings,最后再调用GetLogicalDriveStrings来获得系统所有驱动器
与此同时在小调用一下GetDriveType来判断驱动器的类型
具体代码如下:
#include <windows.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
DWORD dwDiskCount= 0;
DWORD dwBitMask = GetLogicalDrives();
for (DWORD dw = 0 ;dw<26;dw++)
{
if (dwBitMask&1)
{
dwDiskCount++;
}
dwBitMask=dwBitMask>>1;
}
printf("Logical Disk Count %d\n",dwDiskCount);
DWORD dwDriveStrLen = 0;
dwDriveStrLen= GetLogicalDriveStrings(0,NULL);
TCHAR *szDriveName = new char[dwDriveStrLen];
TCHAR *pDriveName=NULL;
if (GetLogicalDriveStrings(dwDriveStrLen,szDriveName))
{
pDriveName = szDriveName;
while (*pDriveName!=NULL)
{
printf("%s\n",pDriveName);
switch (GetDriveType(pDriveName))
{
case DRIVE_UNKNOWN :
break;
case DRIVE_NO_ROOT_DIR:
break;
case DRIVE_REMOVABLE :
break;
case DRIVE_FIXED :
break;
case DRIVE_REMOTE:
break;
case DRIVE_CDROM:
break;
case DRIVE_RAMDISK:
break;
default:
break;
}
pDriveName+=lstrlen(pDriveName)+1;
}
}
else
{
printf("GetLogicalDriveStrings Failed,%d",GetLastError());
}
return 0;
}