PCの現在利用可能なドライブ(論理ドライブ)の情報を取得する方法について紹介します。
現在利用可能なドライブの一覧はSystem.IO名前空間のDirectoryクラスのGetLogicalDrives静的メソッドで取得することができます。また、System.IO名前空間のDriveInfoクラスのGetDrivesメソッドで取得することもできます。
DriveInfosクラスではドライブの様々な情報を取得することができます。
目次
利用可能なドライブの一覧を取得する
DirectoryクラスのGetLogicalDrives静的メソッドでドライブの一覧を取得
DirectoryクラスのGetLogicalDrives静的メソッドの構文は次のようになります。
1 |
public static string[] GetLogicalDrives (); |
GetLogicalDrives静的メソッドの使用例
以下にGetLogicalDrives静的メソッドの使用例を示します。
1 2 3 4 5 6 |
// 現在利用可能なドライブの一覧を取得 string[] drives = Directory.GetLogicalDrives(); foreach (string drive in drives) { Console.WriteLine(drive); } |
D:\
E:\
DriveInfoクラスのGetDrives静的メソッドでドライブの一覧を取得
DriveInfoクラスのGetDrives静的メソッドの構文は次のようになります。
1 |
public static System.IO.DriveInfo[] GetDrives (); |
GetDrives静的メソッドの使用例
以下にGetLogicalDrives静的メソッドの使用例を示します。
1 2 3 4 5 6 |
// 現在利用可能なドライブの一覧を取得 DriveInfo[] driveInfos = DriveInfo.GetDrives(); foreach (DriveInfo driveInfo in driveInfos) { Console.WriteLine(driveInfo.Name); } |
D:\
E:\
F:\
ドライブ名を取得する
ドライブ名の取得にはDriveInfoクラスのNameプロパティを使用します。
DriveInfo.Nameプロパティの構文は次の通りです。
1 |
public string Name { get; } |
C:\、D:\などのドライブ名を取得します。
ボリュームラベルを取得・設定する
ボリュームラベルの取得または設定にはDriveInfoクラスのVolumeLabelプロパティを使用します。
DriveInfo.VolumeLabelプロパティの構文は次の通りです。
1 |
public string VolumeLabel { get; set; } |
ドライブのボリュームラベルを取得または設定します。
VolumeLabelプロパティの使用例
VolumeLabelプロパティを使用してボリュームラベルを取得、設定する例を以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// 論理ドライブの一覧をforeachでループ foreach (DriveInfo driveInfo in DriveInfo.GetDrives()) { // ボリュームラベルを取得 string volumeLabel = driveInfo.VolumeLabel; // ボリュームラベルが設定されているかどうか if (volumeLabel == "") { // ドライブ名を取得 string name = driveInfo.Name; if (name == @"C:\") { // Cドライブの場合はボリュームラベルを「Windows」に設定 driveInfo.VolumeLabel = "Windows"; } else { // ドライブ文字を取得(C, Dなど) string drive = name.Substring(0, 1); // Cドライブ以外の場合はドライブ名+「ボリューム」に設定 driveInfo.VolumeLabel = $"{drive} ボリューム"; } } } |
上記の例では、取得できる全てのドライブを順に検査し、ボリュームラベルが設定されているかどうかをチェックしています。
ボリュームラベルが設定されていないドライブであれば、Cドライブならボリュームラベルを「Windows」に、Cドライブでなければボリュームラベルを「ドライブ文字+ボリューム」に設定しています。
ファイルシステムの名前を取得する
ファイルシステムの名前を取得するにはDriveInfoクラスのDriveFormatプロパティを使用します。
DriveInfo.DriveFormatプロパティの構文は次の通りです。
1 |
public string DriveFormat { get; } |
DriveInfo.DriveFormatプロパティでは、NTFS、FAT32などのファイルシステムの名前を取得できます。
ドライブの種類をを取得する
ドライブの種類をを取得するにはDriveInfoクラスのDriveTypeプロパティを使用します。
DriveInfo.DriveTypeプロパティの構文は次の通りです。
1 |
public System.IO.DriveType DriveType { get; } |
DriveTypeプロパティでは、CD-ROM、取り外し可能、ネットアーク、固定などのドライブの種類が取得できます。
DriveTypeプロパティはDriveType列挙型で取得できます。
DriveType 列挙型
列挙名 | 値 | 説明 |
---|---|---|
Unknown | 0 | ドライブの種類が不明。 |
NoRootDirectory | 1 | ドライブにルートディレクトリがない。 |
Removable | 2 | ドライブがUSBフラッシュドライブなどのリムーバブルストレージデバイス。 |
Fixed | 3 | ドライブがHDD(ハードディスク)、SSD(ソリッドステートドライブ)などの固定ディスク。 |
Network | 4 | ドライブがネットワークドライブ。 |
CDRom | 5 | ドライブがCD-ROM、DVD-ROMなどの光ディスクドライブ。 |
Ram | 6 | ドライブがRAMディスク。 |
ストレージ領域の合計サイズを取得する
ストレージ領域の合計サイズを取得するにはDriveInfoクラスのTotalSizeプロパティを使用します。
DriveInfo.TotalSizeプロパティの構文は次の通りです。
1 |
public long TotalSize { get; } |
TotalSizeプロパティはドライブのストレージ領域の合計サイズをバイト単位で返します。
使用できる空き領域を取得する
使用できる空き領域を取得する手段には、ドライブ全体の空き領域を取得するものと、現在のユーザーが利用可能な空き領域を取得するものの2種類があります。
使用できる空き領域の量の合計を取得する
使用できる空き領域の量の合計を取得するにはDriveInfoクラスのTotalFreeSpaceプロパティを使用します。
DriveInfo.TotalFreeSpaceプロパティの構文は次の通りです。
1 |
public long TotalFreeSpace { get; } |
TotalFreeSpaceプロパティはドライブで使用できる空き領域の量の合計をバイト単位で返します。
ドライブ全体の空き容量を調べるのに使用します。
使用できる空き領域の量を取得する
使用できる空き領域の量を取得するにはDriveInfoクラスのAvailableFreeSpaceプロパティを使用します。
DriveInfo.AvailableFreeSpaceプロパティの構文は次の通りです。
1 |
public long AvailableFreeSpace { get; } |
AvailableFreeSpaceプロパティはドライブで使用できる空き領域の量をバイト単位で返します。
ドライブ全体のうち現在のユーザーが利用可能な空き容量を調べるのに使用します。
ディスク・クォータなどで利用できない領域がある場合は、その空き容量が除外されるためTotalFreeSpaceプロパティの数値とは一致しない場合があります。
ドライブの準備ができているかどうかをを取得する
ドライブの準備ができているかどうかをを取得するにはDriveInfoクラスのIsReadyプロパティを使用します。
DriveInfo.IsReadyプロパティの構文は次の通りです。
1 |
public bool IsReady { get; } |
IsReadyプロパティはドライブの準備ができている場合はtrue。ドライブの準備ができていない場合はfalseを返します。
ルートディレクトリを取得する
ルートディレクトリを取得するにはDriveInfoクラスのRootDirectoryプロパティを使用します。
DriveInfo.RootDirectoryプロパティの構文は次の通りです。
1 |
public System.IO.DirectoryInfo RootDirectory { get; } |
DriveInfo.RootDirectoryプロパティはルートディレクトリの情報をDirectoryInfoオブジェクトとして返してくれます。
サンプルプログラム
Windowsフォームアプリケーションを作成して、ドライブの一覧を取得し、取得したドライブの詳細情報を取得、表示するサンプルプログラムの実装例を記載します。
ユーザーインターフェース
フォームのインターフェースは次のようにします。
フォームの上部にドライブの一覧を表示するリストボックス(ListBox)を配置し、下部にドライブの詳細情報を表示するリストビュー(ListView)を配置します。
ソースコード
サンプルプログラムのフォームには次のようなソースコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
using System; using System.Windows.Forms; // System.IO名前空間のusingを追加 using System.IO; namespace DriveSample { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // フォームロード時のイベントハンドラ private void Form1_Load(object sender, EventArgs e) { try { // ドライブ詳細リストビューの初期設定 listView1.Columns.Add("プロパティ"); listView1.Columns.Add("値"); listView1.HideSelection = false; listView1.View = View.Details; // 使用可能な論理ドライブ一覧をリストボックスに設定 DriveInfo[] driveInfos = DriveInfo.GetDrives(); foreach (DriveInfo driveInfo in driveInfos) { listBox1.Items.Add(driveInfo.Name); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } // リストボックスの選択インデックス変更時のイベントハンドラ private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { try { if (listBox1.SelectedIndex == -1) { return; } // リストボックスの選択されているドライブを取得 int index = listBox1.SelectedIndex; string driveName = listBox1.Items[index].ToString(); // DriveInfoオブジェクトのインスタンスを生成 DriveInfo driveInfo = new DriveInfo(driveName); // リストビューのアイテムをクリア listView1.Items.Clear(); // リストビューにドライブ詳細情報のアイテムの追加 ListViewItem item = listView1.Items.Add("ドライブ名"); item.SubItems.Add(driveName); item = listView1.Items.Add("ボリュームラベル"); item.SubItems.Add(driveInfo.VolumeLabel); item = listView1.Items.Add("ファイルシステム名"); item.SubItems.Add(driveInfo.DriveFormat); item = listView1.Items.Add("種類"); item.SubItems.Add(driveInfo.DriveType.ToString()); item = listView1.Items.Add("容量"); item.SubItems.Add(driveInfo.TotalSize.ToString()); item = listView1.Items.Add("空き領域"); item.SubItems.Add(driveInfo.TotalFreeSpace.ToString()); item = listView1.Items.Add("準備"); item.SubItems.Add(driveInfo.IsReady.ToString()); item = listView1.Items.Add("ルート"); item.SubItems.Add(driveInfo.RootDirectory.Name); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } |
フォームのロードイベントでリストビューの初期化とリストボックスへのドライブ一覧の設定を行います。
リストボックスの選択インデックス変更時のイベントで
上記のプロジェクトを実行します。
ドライブの一覧がリストボックスに表示されているのが確認できます。
次に、リストボックスのドライブを選択します。
ドライブを選択すると、ドライブの詳細情報がリストビューに設定されます。
参考資料
DriveInfo クラス