С помощью 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
Для этого метода вам потребуется ссылка 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");
}
}
ИЛИ
Лучшим вариантом будет чтобы создать свой собственный диалог сохранения, который содержит древовидное представление, показывающее только съемные диски и их содержимое для сохранения пользователем! Я бы порекомендовал этот вариант.
Надеюсь, это поможет
Как насчет:
var removableDrives = from d in System.IO.DriveInfo.GetDrives()
where d.DriveType == DriveType.Removable;
Эта статья пытается помочь:
http://zayko.net/post/How-to-get-list-of-removable-drives-installed-on-a -computer- (C) .aspx
Вы также можете использовать 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();