: 드라이브 타입과 드라이브 명을 알아내려고 하는데..
: 잘 안되네요..
:
: 컴퓨터에 있는 드라이브명과 타입을 체크는 어떻게 합니까??
:
: 알려주세요...
임펠리테리입니다.
드라이브의 타입과 드라이브 명은 각각 API 함수 GetDriveType()와 GetVolumeInformation()를
사용하여 알아낼 수 있습니다. GetVolumeInformation() 함수에서는 이런 정보 외에도,
볼륨 시리얼 넘버, 파일 시스템 등등의 정보를 얻어낼 수 있죠.
아래에 이 두 함수를 사용하는 방법에 대한 간단한 예제를 보여드립니다.
AnsiString __fastcall GetDrvTypeString(char DrvChar)
{
AnsiString DrvTypeString;
switch(GetDriveType((AnsiString(DrvChar)+":\\").c_str()))
{
case 0: DrvTypeString = "Unknown"; break;
case 1: DrvTypeString = "Not exist"; break;
case DRIVE_REMOVABLE: DrvTypeString = "Removable"; break;
case DRIVE_FIXED: DrvTypeString = "Fixed"; break;
case DRIVE_REMOTE: DrvTypeString = "Network"; break;
case DRIVE_CDROM: DrvTypeString = "CD-ROM"; break;
case DRIVE_RAMDISK: DrvTypeString = "RAM"; break;
}
return DrvTypeString;
}
AnsiString __fastcall GetDrvNameString(char DrvChar)
{
char VolName[MAXFILE+MAXEXT+1];
GetVolumeInformation((AnsiString(DrvChar)+":\\").c_str(), VolName, MAXFILE+MAXEXT+1,
NULL, NULL, NULL, NULL, 0);
return (AnsiString)VolName;
}
AnsiString __fastcall GetDrvSerialString(char DrvChar)
{
unsigned long VolSerial;
GetVolumeInformation((AnsiString(DrvChar)+":\\").c_str(), NULL, 0,
&VolSerial, NULL, NULL, NULL, 0);
return IntToHex((int)VolSerial, 8);
}
AnsiString __fastcall GetDrvFileSystemString(char DrvChar)
{
char FileSystem[30];
GetVolumeInformation((AnsiString(DrvChar)+":\\").c_str(), NULL, 0, NULL,
NULL, NULL, FileSystem, 30);
return (AnsiString)FileSystem;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Clear();
Memo1->Lines->Add(AnsiString("Drive type for d: ") + GetDrvTypeString('d'));
Memo1->Lines->Add(AnsiString("Drive name for d: ") + GetDrvNameString('d'));
Memo1->Lines->Add(AnsiString("Drive serial for d: ") + GetDrvSerialString('d'));
Memo1->Lines->Add(AnsiString("Drive file system for d: ") + GetDrvFileSystemString('d'));
}
그럼 도움되시길...
|