GetLogicalDriveStrings和GetDriveType 的用法,C/C++检测可移动磁盘或磁盘类型

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;//返回是否找到
}

0 条评论

What is 15 + 6 ?
Please leave these two fields as-is:
不答对这道小题,是不给通过的哦

昵称

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

沙发空缺中,还不快抢~