ドライブの種類を調べるには、Win32APIのGetDriveType()を使用します。
UINT GetDriveType(
LPCTSTR lpRootPathName
);
GetDriveType()は、引数にルートディレクトリを受け取ります。
引数がNULLのときは、カレントディレクトリのあるドライブになります。
ルートディレクトリには「\」をつけてもつけなくてもかまいません。
//どちらも同じ
GetDriveType("A:");
GetDriveType("A:\");
GetDriveType()は、ドライブの種類を識別する値を返します。
値 | 意味 |
---|---|
0 | 不明 |
1 | ドライブが存在しません。 |
DRIVE_UNKNOWN | ドライブの種類を判別できませんでした。 |
DRIVE_NO_ROOT_DIR | 指定のルートディレクトリが存在しません。たとえば、パスにボリュームがマウントされていません(未フォーマットや、メディアが挿入されていないなど)。 |
DRIVE_REMOVABLE | このディスクは、ドライブから取り出せます。 |
DRIVE_FIXED | このディスクは、ドライブから取り出せません。 |
DRIVE_REMOTE | このドライブは、リモート(ネットワーク)ドライブです。 |
DRIVE_CDROM | このドライブは、CD-ROM ドライブです。 |
DRIVE_RAMDISK | このドライブは、RAM ディスクです。 |
すべてのドライブの種類を調べるプログラムです。
for (char c = 'A'; c <= 'Z'; ++c)
{
std::string drive_letter = std::string(&c, 1) + ":";
int type = GetDriveType(drive_letter.c_str());
if (type > 1)
{
std::string message = drive_letter;
switch (type)
{
case DRIVE_REMOVABLE:
message += "は、ドライブから取り出せます。";
break;
case DRIVE_FIXED:
message += "は、ドライブから取り出せません。";
break;
case DRIVE_REMOTE:
message += "は、リモート(ネットワーク)ドライブです。";
break;
case DRIVE_CDROM:
message += "は、CD-ROM ドライブです。";
break;
case DRIVE_RAMDISK:
message += "は、RAM ディスクです。";
break;
}
std::puts(message.c_str());
}
}