Top / Programming / C++Builder / ドライブの種類を調べる

ドライブの種類を調べる

ドライブの種類を調べるには、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());
  }
}

関連