로컬 디스크 관련하여, 이번 글에서는 로컬 디스크 목록 얻는 방법에 대해 알아보겠습니다.
로컬 디스크는 내PC 폴더에서 볼 수 있으며 아래와 같이 C:\, D:\ 경로를 가집니다.
USB를 꽂거나 하드를 계속 확장하게 되면 E:\, F:\, … 로 계속 늘어 나게 됩니다.
이 목록을 GetLogicalDriveStrings함수를 사용하여 얻어보겠습니다.
함수 원형은 아래와 같습니다.
// 문자열 길이 반환
DWORD GetLogicalDriveStringsW(
DWORD nBufferLength, // 버퍼 길이
LPWSTR lpBuffer // 버퍼
);
함수가 실패하면 0을 반환하고 GetLastError를 통해 확인 가능합니다.
함수가 성공하면 반환되는 문자열의 길이를 반환합니다. 만약 버퍼가 충분히 크지 않으면 nBufferLength보다 큰 값이 반환 됩니다.
반환되는 버퍼에는 로컬디스크 명칭이 모두 담겨져 있고, 널문자열(\0)으로 구분되어 있습니다.
만약 C, D, E 드라이브가 존재하면 “C:\\\0D:\\\0E:\\\0“가 반환됩니다.
코드로 보면 아래와 같습니다.
DWORD dwError = 0;
TCHAR tzDriveString[MAX_PATH] = {0, };
// 반환 예 : "C:\\\0D:\\\0E:\\\0\0"
// 구분 : "\0", 끝 : "\0\0"
DWORD dwStringsLen = ::GetLogicalDriveStrings(MAX_PATH, tzDriveString); // 로컬 디스크 목록 얻기
if (dwStringsLen != 0 && dwStringsLen <= MAX_PATH)
{
CString strTrace;
strTrace.Format(_T("Length : %lu"), dwStringsLen);
TRACE(_T("%s\n"), strTrace);
DWORD dwIndex = 0;
while (0 < _tcslen(&tzDriveString[dwIndex]))
{
strTrace.Format(_T("Drive : %s"), &tzDriveString[dwIndex]);
TRACE(_T("%s\n"), strTrace);
dwIndex += _tcslen(&tzDriveString[dwIndex]) + 1;
}
}
else
dwError = ::GetLastError();
if (dwError != 0)
{
// 에러 처리
}
return;
다음 글에서는 이렇게 얻어온 로컬 디스크의 정보를 알아보도록 하겠습니다.