GetLogicalDriveStrings函数

对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;硬盘
盘符的个数自乘以4就是了;记住:一个ANSI-ASCII码的空字符是一个字节,而一个Unicode码的空字符是两个字节.如果这个缓冲区不
够大,返回值会比nBufferLength大,这是缓冲区要求去获得全部硬盘盘符的原因.

如果函数失败,这个返回值是0;用GetLastError可以捕获这个错误信息!

========================================================

 

 

/*
 * 获取到根目录
 */
void CClient::GetRootDir(string &strRoot)
{
 char  szDrives[128];//临时变量
 if (GetLogicalDriveStrings(sizeof(szDrives), szDrives))   //获取根目录
 {
  char *pTemp = szDrives; //临时字符指针
  string strSubDir;  //临时变量
  
  while(TRUE)
  {
   if (*pTemp)
   {
    strSubDir += *pTemp;
   }else if (!*pTemp && *(pTemp+1))
   {
    strSubDir.erase(strSubDir.end());     //删除最后的'\'
    string strThirdDir;
    GetThirdSubDir(strSubDir,strThirdDir);    //获取子目录
    strSubDir += strThirdDir;
    
    strSubDir.insert(strSubDir.begin(), '<');   //左分隔标记
    strSubDir +='>';         //右分隔标记
    
    strRoot += strSubDir;        //加入发送字符变量
    
    strSubDir.erase(strSubDir.begin(), strSubDir.end());//清空该变量
    
   }else
   { 
    strSubDir.erase(strSubDir.end());     //删除最后的'\'
    
    string strThirdDir;
    GetThirdSubDir(strSubDir,strThirdDir);    //获取子目录
    strSubDir += strThirdDir;
    
    strSubDir.insert(strSubDir.begin(), '<');   //左分隔标记
    strSubDir +='>';         //右分隔标记
    
    strRoot += strSubDir;        //加入发送字符变量
    
    strSubDir.erase(strSubDir.begin(), strSubDir.end());//清空该变量
    break;            //结束
   }   
   pTemp++;
  }  
 }
 return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值