VC++를 사용하는 Windows에서 사용 가능한 모든 드라이브 문자 (아직 가져 오지 않은)를 열거하고 싶습니다.Windows에서 사용 가능한 모든 드라이브 문자 열거
어떻게하면됩니까?
VC++를 사용하는 Windows에서 사용 가능한 모든 드라이브 문자 (아직 가져 오지 않은)를 열거하고 싶습니다.Windows에서 사용 가능한 모든 드라이브 문자 열거
어떻게하면됩니까?
::GetLogicalDrives()은 사용 가능한 (읽기 : 사용 된) 드라이브 목록을 마스크의 비트로 반환합니다. 여기에는 매핑 된 네트워크 드라이브가 포함되어야합니다. 따라서 단순히 비트를 걷어 제로 비트를 찾아 드라이브가 없음을 의미 할 수 있습니다. 확실하지 않은 경우 드라이브 문자 + ":\"
(C 코드의 경우 ":\\"
또는 유니 코드 인식 용어의 경우 _T(":\\")
)을 사용하여 항상 ::GetDriveType()을 호출 할 수 있으며 드라이브가 사용 가능한 경우 DRIVE_UNKNOWN
또는 DRIVE_NO_ROOT_DIR
을 반환해야합니다.
GetLogicalDriveStrings Function은 좋은 출발점입니다.
GetLogicalDriveStrings
현재 사용중인 드라이브 문자 목록 만 표시됩니다.
GetVolumeInformation
은 특정 드라이브에 대한 자세한 정보를 얻는 데 사용할 수 있습니다.
GetLogicalDrives 및 GetLogicalDriveStrings는 다른 네임 스페이스에서 생성 된 네트워크 드라이브를보고 있지 않습니다.
예를 들어 로컬 시스템에서 실행되는 서비스에서 함수를 호출하면 기록 된 사용자가 만든 네트워크 드라이브가 표시되지 않습니다.
Windows XP부터 시작됩니다. 다음 문서는이 사건을 설명 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363908(v=vs.85).aspx
그 이유는 무엇입니까? 다른 사용자가 정의한 드라이브 문자를 다시 사용할 수 있으며 사용 가능한 미사용 문자 만 필요했습니다. – SilverbackNet
임하지 드라이브를 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++;
}
}
}
코드가 너무 많습니다. – TheRealChx101
예, GetLogicalDriveStrings보다 쉽습니다. – Alnitak