19

C#でリムーバブルディスクの一覧を取得したいです。ローカル ドライブをスキップしたい。ユーザーにファイルをリムーバブルディスクにのみ保存してもらいたいからです。

4

3 に答える 3

38

System.IOこのメソッドの参照が必要になります。

var driveList = DriveInfo.GetDrives();

foreach (DriveInfo drive in driveList)
{
    if (drive .DriveType == DriveType.Removable)
    {
    //Add to RemovableDrive list or whatever activity you want
    }    
}

または、LINQ ファンの場合:

var driveList = DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Removable);




保存部分については、私が知る限り、ユーザーが SaveFileDialog を使用して保存できる場所を制限できるとは思いませんが、SaveFileDialog を表示した後にチェックを完了することができます

if(saveFileDialog.ShowDialog() == DialogResult.OK)
{
  if (CheckFilePathIsOfRemovableDisk(saveFileDialog.FileName) == true)
  {
  //carry on with save
  }
  else
  {
  MessageBox.Show("Must save to Removable Disk, location was not valid");
  }
}

また

最適なオプションは、ユーザーが保存するリムーバブル ドライブとその内容のみを表示するツリー ビューを含む独自の保存ダイアログを作成することです。このオプションをお勧めします。

お役に立てれば

于 2009-07-14T10:00:16.527 に答える
10

どうですか:

var removableDrives = from d in System.IO.DriveInfo.GetDrives()
                      where d.DriveType == DriveType.Removable;
于 2009-07-14T09:59:05.780 に答える
5

WMI を使用して、リムーバブル ドライブの一覧を取得することもできます。

ManagementObjectCollection drives = new ManagementObjectSearcher (
     "SELECT Caption, DeviceID FROM Win32_DiskDrive WHERE InterfaceType='USB'"
).Get();

コメントに基づいて編集:

ドライブのリストを取得したら、GUID を取得し、それらを SaveFileDialogInstance.CustomPlaces コレクションに追加します。

以下のコードは微調整が必​​要です...

System.Windows.Forms.SaveFileDialog dls = new System.Windows.Forms.SaveFileDialog();
dls.CustomPlaces.Clear();
dls.CustomPlaces.Add(AddGuidOfTheExternalDriveOneByOne);
....
....
dls.ShowDialog();
于 2009-07-14T10:04:23.960 に答える