Как получить список съемных дисков в c #? - PullRequest
18 голосов
/ 14 июля 2009

Я хочу получить список сменных дисков в c #. Я хочу пропустить локальные диски. Потому что я хочу, чтобы пользователь сохранил файл только на съемном диске.

Ответы [ 4 ]

36 голосов
/ 14 июля 2009

Вам потребуется ссылка 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");
  }
}

OR

Лучшим вариантом будет создать собственный диалог сохранения, который содержит древовидное представление, отображающее только съемные диски и их содержимое для сохранения пользователем! Я бы порекомендовал этот вариант.

Надеюсь, это поможет

10 голосов
/ 14 июля 2009

Как насчет:

var removableDrives = from d in System.IO.DriveInfo.GetDrives()
                      where d.DriveType == DriveType.Removable;
4 голосов
/ 14 июля 2009

Вы также можете использовать 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();
4 голосов
/ 14 июля 2009

Эта статья, похоже, делает свое дело:

http://zayko.net/post/How-to-get-list-of-removable-drives-installed-on-a-computer-(C).aspx

...