У меня есть некоторые функции, которые позволяют пользователю выполнять поиск по нескольким каталогам для файлов определенного типа, а затем только путь этих файлов добавляется к listbox
. Сейчас это делается через некоторые вложенные операторы foreach
. Это будет извлечение сотен тысяч файловых путей, поэтому мне было любопытно, какие еще эффективные способы для этого?Должен ли я реорганизовать эти вложенные заявления foreach?
Кроме того, я знаю, что это звучит глупо, чтобы добавить, что многие предметы относятся к listbox
. Я делаю то, что мне сказали. У меня есть чувство, что в будущем ему будет предложено избавиться, но файловые пути все равно придется хранить в списке где-нибудь.
Примечание: Я использую WindowsAPICodePack
, чтобы получить диалоговое окно, которое позволяет выбирать несколько каталогов.
List<string> selectedDirectories = new List<string>();
/// <summary>
/// Adds the paths of the directories chosen by the user into a list
/// </summary>
public void AddFilesToList()
{
selectedDirectories.Clear(); //make sure list is empty
var dlg = new CommonOpenFileDialog();
dlg.IsFolderPicker = true;
dlg.AddToMostRecentlyUsedList = false;
dlg.AllowNonFileSystemItems = false;
dlg.EnsureFileExists = true;
dlg.EnsurePathExists = true;
dlg.EnsureReadOnly = false;
dlg.EnsureValidNames = true;
dlg.Multiselect = true;
dlg.ShowPlacesList = true;
if (dlg.ShowDialog() == CommonFileDialogResult.Ok)
{
selectedDirectories = dlg.FileNames.ToList(); //add paths of selected directories to list
}
}
/// <summary>
/// Populates a listbox with all the filepaths of the selected type of file the user has chosen
/// </summary>
public void PopulateListBox()
{
foreach (string directoryPath in selectedDirectories) //for each directory in list
{
foreach (string ext in (dynamic)ImageCB.SelectedValue) //for each file type selected in dropdown
{
foreach (string imagePath in Directory.GetFiles(directoryPath, ext, SearchOption.AllDirectories)) //for each file in specified directory w/ specified format(s)
{
ListBox1.Items.Add(imagePath); //add file path to listbox
}
}
}
}
Edit: Не уверен, если это имеет значение, но я использую WPF
listbox
, не winforms
.
Одно слово ... [Linq] (https://msdn.microsoft.com/en-us/library/bb397933.aspx) –
.. вы собираетесь добавлять «сотни тысяч путей файлов "в список? – stuartd
Да, на данный момент это то, что человек, которого я делаю для желаний. В будущем есть шанс, что они не будут отображаться в списке, но все равно их нужно будет сохранить в списке. – pfinferno