GetLogicalDriveStrings函数
原形:
DWORD GetLogicalDriveStrings(
DWORD nBufferLength, // size of buffer
LPTSTR lpBuffer // drive strings buffer
);
说明:GetLogicalDriveStrings函数将一个缓冲区lpBuffer填入在计算机上存在的硬盘盘符.
参数说明:
nBufferLength是缓冲区lpBuffer的大小,以字节为单位.它的大小不包含最后的空字符.如果它的值为零,缓冲区不可用.
lpBuffer指向一个接收各种以零结尾的字符串缓冲区,一个空字符用来区分各个可用硬盘的,最后在末尾有再以空字符结尾,假如
你的电脑上有C,D两个硬盘盘符,则它能得到一个字符串是:
'C',':','/',' ','D',':','/',' ',' '
即:C:/<null>D:/<null><null>
返回值:
如果函数成功结束,返回值是获得的字符串长度,以字节为单位,不包括最后的一个空字符,好像上面的字符串获得的长度就是8;
此处不能够调用strlen来检测字符长度,否则返回的就只有一个C:/盘了。
GetDriveType 头文件在“winbase.h”
UINT GetDriveType(
LPCTSTR lpRootPathName // root directory
);
函数功能
判断磁盘类型
参数说明
lpRootPathName 包含了根目录路径的字符串指针
返回值
DRIVE_UNKNOWN 未知的磁盘类型
DRIVE_NO_ROOT_DIR 说明lpRootPathName是无效的
DRIVE_REMOVABLE 可移动磁盘
DRIVE_FIXED 固定磁盘
DRIVE_REMOTE 网络磁盘
DRIVE_CDROM 光驱
DRIVE_RAMDISK 为RAM
下面是通过GetLogicalDriveStrings和GetDriveType来判断系统中是否有移动盘:
BOOL CMyList::CheckRemoveAbleDisk()
{
TCHAR szDriverName[512];
CString strDriverName;
BOOL fFound=FALSE;;
DWORD nLength=GetLogicalDriveStrings(sizeof(szDriverName),szDriverName);
int i;
for(i=0;i<(int)nLength;i++){
if(szDriverName[i]!='/0')
strDriverName+=szDriverName[i];//读取盘符
else{
strDriverName=strDriverName.Left(strDriverName.GetLength()-1);
if(GetDriveType((LPCTSTR)strDriverName)==DRIVE_REMOVABLE){//判断是否是移动,也可以用来判断其他盘
strRemoveAbleDisk=strDriverName;
fFound=TRUE;
break;
}
strDriverName="";
}
}
return fFound;//返回是否找到
}