5

コンボ ボックスに論理ドライブのリストを入力したいのですが、マップされたドライブを除外したいと考えています。以下のコードは、フィルタリングなしですべての論理ドライブのリストを表示します。

comboBox.Items.AddRange(Environment.GetLogicalDrives());

物理ドライブとマップされたドライブを判別するのに役立つ方法はありますか?

4

7 に答える 7

5

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);
        }
    }

プロパティDriveTypeNetwork

于 2013-01-31T16:58:20.757 に答える
2

クラスDriveTypeでプロパティを使用できます DriveInfo

 DriveInfo[] dis = DriveInfo.GetDrives();
 foreach ( DriveInfo di in dis )
 {
     if ( di.DriveType == DriveType.Network )
     {
        //network drive
     }
  }
于 2013-01-31T16:58:06.537 に答える
2

ドライブのリストを取得するには、 DriveInfo.GetDrivesを使用します。次に、そのDriveTypeプロパティでリストをフィルター処理できます。

于 2013-01-31T16:57:19.823 に答える
0

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);
    }

}
于 2013-01-31T20:08:42.787 に答える
0

頭に浮かぶ最初のことの 1 つは、マップされたドライブには、で始まる文字列があることです。\\

より広範で信頼性の高い別のアプローチがここで詳しく説明されています:システムとそのサーバー名でマップされたネットワーク ドライブをプログラムで検出する方法


DriveInfo.GetDrives()または、後でフィルタリングするのに役立つより多くのメタデータを持つオブジェクトを提供する呼び出しを試してください。次に例を示します。

http://www.daniweb.com/software-development/csharp/threads/159290/getting-mapped-drives-list

于 2013-01-31T16:55:58.420 に答える
0

この件に関して私が見つけた最も完全な情報 (インターネットでの長い検索の後) は、Code Project で入手できます: Get a list of physical disks and the partitions on them in VB.NET the easy way

(これは VB プロジェクトです。)

于 2013-01-31T19:39:14.770 に答える
0

使用してみてくださいSystem.IO.DriveInfo.GetDrives

comboBox.Items.AddRange(
       System.IO.DriveInfo.GetDrives()
                          .Where(di=>di.DriveType != DriveType.Network)
                          .Select(di=>di.Name));
于 2013-01-31T16:59:51.610 に答える