for (Drive = 'A';Drive<='Z';Drive++)
{
      String d;
      d=IntToStr(Drive)+":\\";      switch GetDriveType(d.c_str()) 
      {
      case DRIVE_REMOVABLE : 
        Listbox1->Items->Add(Drive + "    Removable"); 
      case DRIVE_FIXED : 
        Listbox1->Items->Add(Drive + "    Fixed"); 
      case DRIVE_REMOTE : 
        Listbox1->Items->Add(Drive + "    Network drive"); 
      case DRIVE_CDROM : 
        Listbox1->Items->Add(Drive + "    CD-ROM"); 
      case DRIVE_RAMDISK : 
        Listbox1->Items->Add(Drive + "    RAM Disk"); 
     }
 }上面是一段伪代码,我对VC不熟,对C++ BUILDER熟悉一点。所以用BCB的语法。当然,关键是GetDriveType这个API。

解决方案 »

  1.   

    DWORD dwLogDrives=GetLogicalDrives();
    UINT nNumDrives=0;
    do
    {
      if ( dwLogDrives%10 && nNumDrives!=1)
     {
         _stprintf(lpszDriveString,_T("%c:\\"),(TCHAR)(_T('A')+nNumDrives));
       m_LocalCombox.AddString (lpszDriveString);
     }
    dwLogDrives>>=1;
    nNumDrives++;
    } while ( dwLogDrives !=0 );
      

  2.   

    DWORD dwRet=GetLogicalDriveString(0,NULL);
    LPCTR lpDrvString=new char[dwRet];
    GetLogicalDriveString(dwRet,lpDrvString);结果是lpDrvString="A:\\\nC:\\\0D:\\\0\0";(假设只有A,C,D盘)
      

  3.   

    敲错了一点点
    结果是lpDrvString="A:\\\0C:\\\0D:\\\0\0";(假设只有A,C,D盘) 
      

  4.   

    thanks all ,  加分了
      

  5.   

    刚写了一个
    void GetAllLogicalDriveString(CStringArray& strArray)
    {
    DWORD dwNum = GetLogicalDriveStrings(0, NULL) * sizeof(TCHAR);
    HANDLE hHeap = GetProcessHeap();
    LPTSTR pszAllDrives = (LPTSTR)HeapAlloc(hHeap, 
                                                 HEAP_ZERO_MEMORY, dwNum);
    GetLogicalDriveStrings(dwNum / sizeof(TCHAR), pszAllDrives); strArray.RemoveAll();
    LPTSTR pszDrive = pszAllDrives;
    while(pszDrive[0] != 0)
    {
    strArray.Add(pszDrive);
    pszDrive = _tcschr(pszDrive, 0) + 1;
    } HeapFree(hHeap, 0, pszAllDrives);
    }