Как получить список съемного диска в c#?

С помощью ForEach DSL вы можете написать

import static ch.akuhn.util.query.Query.select;
import static ch.akuhn.util.query.Query.$result;
import ch.akuhn.util.query.Select;

Collection collection = ...

for (Select each : select(collection)) {
    each.yield = each.value.length() > 3;
}

Collection result = $result();

Учитывая набор [быстрых, коричневых, лисиц, перепрыгивающих через ленивую собаку], это приводит к [быстрым, коричневым, jumps, over, lazy], т.е. все строки длиннее трех символов.

Все поддерживаемые ForEach DSL стили итераций:

  • AllSatisfy
  • AnySatisfy
  • Collect
  • Counnt
  • CutPieces
  • Detect
  • GroupedBy
  • IndexOf
  • InjectInto
  • Reject
  • Select

Более подробную информацию см. В https://www.iam.unibe.ch/scg/svn_repos/Sources / ForEach

18
задан Leandro 18 June 2012 в 21:49
поделиться

4 ответа

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

ИЛИ

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

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

36
ответ дан 30 November 2019 в 06:14
поделиться

Как насчет:

var removableDrives = from d in System.IO.DriveInfo.GetDrives()
                      where d.DriveType == DriveType.Removable;
10
ответ дан 30 November 2019 в 06:14
поделиться
4
ответ дан 30 November 2019 в 06:14
поделиться

Вы также можете использовать 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
ответ дан 30 November 2019 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: