DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

ドライブの情報(タイプ、ボリュームラベル、ファイルシステムなど)を取得する

ここでは、ドライブのタイプ、ボリュームラベル、ファイルシステムなどの情報を取得する方法を紹介します。なおドライブの容量や空き容量を取得する方法は、こちらで紹介しています。

.NET Framework 2.0以降で、DriveInfoクラスを使用する方法

.NET Framework 2.0からはDriveInfoクラスにより、ドライブの情報を取得することができます。

以下の例では、"C:"ドライブの情報を表示しています。

VB.NET
コードを隠すコードを選択
'C:ドライブの情報を取得する
Dim drive As New System.IO.DriveInfo("C")

'ドライブの名前
Console.WriteLine("ドライブの名前:{0}", drive.Name)
'ドライブタイプ
Dim typeDescription As String = ""
Select Case drive.DriveType
    Case System.IO.DriveType.CDRom
        typeDescription = "光ディスクドライブ(CD-ROM,DVD-ROMなど)"
    Case System.IO.DriveType.Fixed
        typeDescription = "固定ディスク"
    Case System.IO.DriveType.Network
        typeDescription = "ネットワークドライブ"
    Case System.IO.DriveType.NoRootDirectory
        typeDescription = "ルートディレクトリがない"
    Case System.IO.DriveType.Ram
        typeDescription = "RAMディスク"
    Case System.IO.DriveType.Removable
        typeDescription = "リムーバブルストレージデバイス" + _
            "フロッピーディスクドライブ、USBフラッシュドライブなど"
    Case System.IO.DriveType.Unknown
        typeDescription = "不明"
End Select
Console.WriteLine("ドライブタイプ:{0}", typeDescription)

'ドライブの準備ができているか調べる
If drive.IsReady Then
    'ボリュームラベル
    Console.WriteLine("ボリュームラベル:{0}", drive.VolumeLabel)
    'ファイルシステム(NTFS、FAT32など)
    Console.WriteLine("ファイルシステム:{0}", drive.DriveFormat)
    'ルートディレクトリ(DirectoryInfoオブジェクト)
    Console.WriteLine("ルートディレクトリ:{0}", drive.RootDirectory.FullName)
End If
C#
コードを隠すコードを選択
//C:ドライブの情報を取得する
System.IO.DriveInfo drive = new System.IO.DriveInfo("C");

//ドライブの名前
Console.WriteLine("ドライブの名前:{0}", drive.Name);
//ドライブタイプ
string typeDescription = "";
switch (drive.DriveType)
{
    case System.IO.DriveType.CDRom:
        typeDescription = "光ディスクドライブ(CD-ROM,DVD-ROMなど)";
        break;
    case System.IO.DriveType.Fixed:
        typeDescription = "固定ディスク";
        break;
    case System.IO.DriveType.Network:
        typeDescription = "ネットワークドライブ";
        break;
    case System.IO.DriveType.NoRootDirectory:
        typeDescription = "ルートディレクトリがない";
        break;
    case System.IO.DriveType.Ram:
        typeDescription = "RAMディスク";
        break;
    case System.IO.DriveType.Removable:
        typeDescription = "リムーバブルストレージデバイス" +
            "フロッピーディスクドライブ、USBフラッシュドライブなど";
        break;
    case System.IO.DriveType.Unknown:
        typeDescription = "不明";
        break;
}
Console.WriteLine("ドライブタイプ:{0}", typeDescription);

//ドライブの準備ができているか調べる
if (drive.IsReady)
{
    //ボリュームラベル
    Console.WriteLine("ボリュームラベル:{0}", drive.VolumeLabel);
    //ファイルシステム(NTFS、FAT32など)
    Console.WriteLine("ファイルシステム:{0}", drive.DriveFormat);
    //ルートディレクトリ(DirectoryInfoオブジェクト)
    Console.WriteLine("ルートディレクトリ:{0}", drive.RootDirectory.FullName);
}

上記のコードを実行した結果、例えば次のように出力されます。

ドライブの名前:C:\
ドライブタイプ:固定ディスク
ボリュームラベル:Windows
ファイルシステム:NTFS
ルートディレクトリ:C:\

WMIを使用する方法

WMI使って取得することもできます。WMIはWindows2000以上のOSで使用できます。(それ以外のOSでもインストールすれば使用できます。こちらからダウンロードできるようです。

下の例ではSystem.Management.dllを参照設定に追加する必要があります。

VB.NET
コードを隠すコードを選択
'C:ドライブの情報を取得する
Dim mo As New System.Management.ManagementObject("Win32_LogicalDisk=""C:""")

'名前("C:"など)
Console.WriteLine("名前:{0}", CStr(mo.Properties("Name").Value))
'ドライブタイプ
Dim typeDescription As String = ""
Select Case Convert.ToInt64(mo.Properties("DriveType").Value)
    Case 5
        typeDescription = "光ディスクドライブ(CD-ROM,DVD-ROMなど)"
    Case 3
        typeDescription = "固定ディスク"
    Case 4
        typeDescription = "ネットワークドライブ"
    Case 1
        typeDescription = "ルートディレクトリがない"
    Case 6
        typeDescription = "RAMディスク"
    Case 2
        typeDescription = "リムーバブルストレージデバイス" + _
            "フロッピーディスクドライブ、USBフラッシュドライブなど"
    Case 0
        typeDescription = "不明"
End Select
Console.WriteLine("ドライブタイプ:{0}", typeDescription)
'ボリュームラベル
Console.WriteLine("ボリュームラベル:{0}", _
    CStr(mo.Properties("VolumeName").Value))
'ボリュームシリアルナンバー
Console.WriteLine("ボリュームシリアルナンバー:{0}", _
    CStr(mo.Properties("VolumeSerialNumber").Value))
'ファイルシステム(NTFS、FAT32など)
Console.WriteLine("ファイルシステム:{0}", _
    CStr(mo.Properties("FileSystem").Value))
'説明(「ローカル固定ディスク」など)
Console.WriteLine("説明:{0}", _
    CStr(mo.Properties("Description").Value))

mo.Dispose()
C#
コードを隠すコードを選択
//C:ドライブの情報を取得する
System.Management.ManagementObject mo =
    new System.Management.ManagementObject("Win32_LogicalDisk=\"C:\"");

//名前("C:"など)
Console.WriteLine("名前:{0}",
    (string)mo.Properties["Name"].Value);
//ドライブタイプ
string typeDescription = "";
switch ((uint)mo.Properties["DriveType"].Value)
{
    case 5:
        typeDescription = "光ディスクドライブ(CD-ROM,DVD-ROMなど)";
        break;
    case 3:
        typeDescription = "固定ディスク";
        break;
    case 4:
        typeDescription = "ネットワークドライブ";
        break;
    case 1:
        typeDescription = "ルートディレクトリがない";
        break;
    case 6:
        typeDescription = "RAMディスク";
        break;
    case 2:
        typeDescription = "リムーバブルストレージデバイス" +
            "フロッピーディスクドライブ、USBフラッシュドライブなど";
        break;
    case 0:
        typeDescription = "不明";
        break;
}
Console.WriteLine("ドライブタイプ:{0}", typeDescription);
//ボリュームラベル
Console.WriteLine("ボリュームラベル:{0}",
    (string)mo.Properties["VolumeName"].Value);
//ボリュームシリアルナンバー
Console.WriteLine("ボリュームシリアルナンバー:{0}",
    (string)mo.Properties["VolumeSerialNumber"].Value);
//ファイルシステム(NTFS、FAT32など)
Console.WriteLine("ファイルシステム:{0}",
    (string)mo.Properties["FileSystem"].Value);
//説明(「ローカル固定ディスク」など)
Console.WriteLine("説明:{0}",
    (string)mo.Properties["Description"].Value);

mo.Dispose();
  • 履歴:
  • 2010/5/15 「WMIを使用する方法」のVB.NETのコードが.NET Framework 1.1以下では動かなかった問題を修正。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • 「???を参照に追加します」の意味が分からないという方は、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。