2008-11-13 7 views

답변

13

::GetLogicalDrives()은 사용 가능한 (읽기 : 사용 된) 드라이브 목록을 마스크의 비트로 반환합니다. 여기에는 매핑 된 네트워크 드라이브가 포함되어야합니다. 따라서 단순히 비트를 걷어 제로 비트를 찾아 드라이브가 없음을 의미 할 수 있습니다. 확실하지 않은 경우 드라이브 문자 + ":\" (C 코드의 경우 ":\\" 또는 유니 코드 인식 용어의 경우 _T(":\\"))을 사용하여 항상 ::GetDriveType()을 호출 할 수 있으며 드라이브가 사용 가능한 경우 DRIVE_UNKNOWN 또는 DRIVE_NO_ROOT_DIR을 반환해야합니다.

+0

예, GetLogicalDriveStrings보다 쉽습니다. – Alnitak

1

GetLogicalDrives 및 GetLogicalDriveStrings는 다른 네임 스페이스에서 생성 된 네트워크 드라이브를보고 있지 않습니다.

예를 들어 로컬 시스템에서 실행되는 서비스에서 함수를 호출하면 기록 된 사용자가 만든 네트워크 드라이브가 표시되지 않습니다.

Windows XP부터 시작됩니다. 다음 문서는이 사건을 설명 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363908(v=vs.85).aspx

+0

그 이유는 무엇입니까? 다른 사용자가 정의한 드라이브 문자를 다시 사용할 수 있으며 사용 가능한 미사용 문자 만 필요했습니다. – SilverbackNet

3

임하지 드라이브를 CreateFile을 사용하여에서 액세스 가능 무엇인지 확인하는 것이 비주얼 C에서 컴파일 + +하지만 난 데브 C++ 또는 코드 블록에이 슈 투름 코딩 된 경우를 열거 나하는 방법 슈어와 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

관련 문제