コンボ ボックスに論理ドライブのリストを入力したいのですが、マップされたドライブを除外したいと考えています。以下のコードは、フィルタリングなしですべての論理ドライブのリストを表示します。
comboBox.Items.AddRange(Environment.GetLogicalDrives());
物理ドライブとマップされたドライブを判別するのに役立つ方法はありますか?
コンボ ボックスに論理ドライブのリストを入力したいのですが、マップされたドライブを除外したいと考えています。以下のコードは、フィルタリングなしですべての論理ドライブのリストを表示します。
comboBox.Items.AddRange(Environment.GetLogicalDrives());
物理ドライブとマップされたドライブを判別するのに役立つ方法はありますか?
DriveInfoクラスを使用できます
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
Console.WriteLine("Drive {0}", d.Name);
Console.WriteLine(" File type: {0}", d.DriveType);
if(d.DriveType != DriveType.Network)
{
comboBox.Items.Add(d.Name);
}
}
プロパティDriveType
がNetwork
クラスDriveType
でプロパティを使用できます DriveInfo
DriveInfo[] dis = DriveInfo.GetDrives();
foreach ( DriveInfo di in dis )
{
if ( di.DriveType == DriveType.Network )
{
//network drive
}
}
ドライブのリストを取得するには、 DriveInfo.GetDrivesを使用します。次に、そのDriveTypeプロパティでリストをフィルター処理できます。
This is what worked for me:
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
if (d.IsReady && (d.DriveType == DriveType.Fixed || d.DriveType == DriveType.Removable))
{
cboSrcDrive.Items.Add(d.Name);
cboTgtDrive.Items.Add(d.Name);
}
}
頭に浮かぶ最初のことの 1 つは、マップされたドライブには、で始まる文字列があることです。\\
より広範で信頼性の高い別のアプローチがここで詳しく説明されています:システムとそのサーバー名でマップされたネットワーク ドライブをプログラムで検出する方法
DriveInfo.GetDrives()
または、後でフィルタリングするのに役立つより多くのメタデータを持つオブジェクトを提供する呼び出しを試してください。次に例を示します。
http://www.daniweb.com/software-development/csharp/threads/159290/getting-mapped-drives-list
この件に関して私が見つけた最も完全な情報 (インターネットでの長い検索の後) は、Code Project で入手できます: Get a list of physical disks and the partitions on them in VB.NET the easy way
(これは VB プロジェクトです。)
使用してみてくださいSystem.IO.DriveInfo.GetDrives
:
comboBox.Items.AddRange(
System.IO.DriveInfo.GetDrives()
.Where(di=>di.DriveType != DriveType.Network)
.Select(di=>di.Name));