2008-11-13 55 views

回答

13

::GetLogicalDrives()將可用(讀取:已使用)驅動器的列表作爲掩碼中的位返回。這應該包括映射的網絡驅動器。因此,您可以簡單地走位找到零位,這意味着不存在驅動器。如果有疑問,當驅動器可用時,您總是可以撥打::GetDriveType(),驅動器號爲+ ":\"(C代碼爲":\\",當然也可以使用支持Unicode的術語_T(":\\")),如果驅動器可用,則返回DRIVE_UNKNOWNDRIVE_NO_ROOT_DIR

+0

是的,這比GetLogicalDriveStrings更容易! – Alnitak 2008-11-13 08:53:17

1

GetLogicalDrives和GetLogicalDriveStrings沒有看到在不同命名空間中創建的網絡驅動器。

例如,從在本地系統下運行的服務調用函數將看不到由已記錄的用戶創建的網絡驅動器。

這是從Windows XP開始。下面的文章描述這種情況: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363908(v=vs.85).aspx

+0

這是爲什麼?無論其他用戶如何定義它們,您都可以重新使用驅動器號,並且問題只需要可用的未使用的字母。 – SilverbackNet 2014-04-21 23:27:20

3

我不是舒爾如何枚舉他們或是否會編制有關的Visual C++,但我斯特姆編碼本上開發的C++或代碼塊檢查什麼驅動是acessible使用的CreateFile和使用GetDriveType的驅動器是什麼類型。程序檢查驅動器從A到Z:

#include <windows.h> 
#include <cstring> 
#include <sstream> 
#include <iostream> 

using namespace std; 

int __stdcall WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, INT nShowCmd) 
{ 
    HANDLE hDevice = NULL; 
    HANDLE fileFind = NULL; 
    while(true) 
    { 
     Sleep(3005); 
     char drv='A'; 
     while(drv!='[') 
     { 
      Sleep(105); 
      const char *charDrvCF; 
      const char *charDrv; 
      stringstream Str; 
      string drvStr; 
      Str<<drv; 
      Str>>drvStr; 
      string drvSpc=drvStr+":\\"; 
      string fCheck="\\\\.\\"; 
      string fhCheck=fCheck+drvStr+":"; 
      charDrvCF=fhCheck.c_str(); 
      charDrv=drvSpc.c_str();  
      hDevice=CreateFile(charDrvCF, 
           GENERIC_READ|GENERIC_WRITE, 
           FILE_SHARE_READ|FILE_SHARE_WRITE, 
           NULL, 
           OPEN_EXISTING, 
           0, 
           NULL); 
      if(hDevice!=INVALID_HANDLE_VALUE) 
      { 
       switch(GetDriveType(charDrv)) 
       { 
        case DRIVE_FIXED: 
        { 
         cout<<"Fixed drive detected: "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_REMOVABLE: 
        { 
         cout<<"Removable drive detected: "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_NO_ROOT_DIR: 
        { 
         cout<<"There is no volume mounted at the specified path. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_REMOTE: 
        { 
         cout<<"The drive is a remote (network) drive. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_CDROM: 
        { 
         cout<<"The drive is a CD-ROM drive. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_RAMDISK: 
        { 
         cout<<"The drive is a RAM disk. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_UNKNOWN: 
        { 
         cout<<"The drive type cannot be determined. "<<charDrv<<endl; 
         break; 
        } 
       } 
      } 
     drv++; 
     } 
    } 
} 
+0

太多代碼大聲笑 – TheRealChx101 2013-10-17 08:47:44