Для Eclipse работало следующее выражение:
Foo
jadajada Bar "
blockquote>Регулярное выражение:
Foo[\S\s]{1,10}.*Bar*
Другая возможность, будет использовать шаблон поиска. К сожалению, невозможно найти несколько шаблонов одновременно. Но вы можете использовать SelectMany
для сканирования списка шаблонов и свести результаты поиска в один список:
var allPatterns = comboFileTypes.Items.Cast<string>();
allPatterns.SelectMany(pattern => Directory.EnumerateFiles(@"F:\temp", $"*.{pattern}", SearchOption.AllDirectories));
Имена файлов будут упорядочены как список шаблонов
Ну, может быть, я упускаю что-то большое, но ...
void onOpen()
{
var selected = comobFileTypes.SelectedItem;
if ( selected != null ) {
string ext = "." + selected.ToString();
var files = Directory.EnumerateFiles(sourceDIR.Text, "*.*", SearchOption.AllDirectories).Where(
s => s.EndsWith( ext );
// ...more things...
}
return;
}
Ключевым моментом здесь является то, что ComboBox имеет свойство SelectedItem , которое может быть null
, если ничего не выбрано, или удерживать выбранный параметр.
Если вы хотите выбрать все расширения, вы можете использовать свойство Items .
void onOpen()
{
string[] items = new string[ comboFileTypes.Items.Length ];
foreach(int i = 0; i < items.Length; ++i) {
items[ i ] = "." + comboFileTypes.Items[ i ].ToString();
}
var files = new List<string>();
var allFiles = Directory.EnumerateFiles( sourceDIR.Text, "*.*", SearchOption.AllDirectories );
foreach(string ext in items) {
files.AddRange( allFiles.Where( s => s.EndsWith( ext ) );
}
// ...more things... with files...
return;
}
Надеюсь, это поможет.
Получить все расширения из выпадающего списка:
var extensions = comboFileTypes.Items.Cast<string>().Select(x => "." + x);
Поиск без учета регистра путем перечисления всех файлов в каталоге:
var files = Directory.EnumerateFiles(sourceDIR.Text, "*.*", SearchOption.AllDirectories).Where(x => extensions.Any(y => y.Equals(Path.GetExtension(x), StringComparison.OrdinalIgnoreCase)));
В качестве альтернативы вы можете искать только указанные расширения:
var files = extensions.AsParallel().SelectMany(x => Directory.EnumerateFiles(sourceDIR.Text, "*" + x, SearchOption.AllDirectories));
попробуйте этот код:
List<string> items = new List<string>();
for (int i = 0; i < comboBox1.Items.Count; i++)
{
items.Add(comboBox1.Items[i].ToString().ToLower());
}
var files = Directory
.EnumerateFiles(sourceDIR.Text, "*.*", SearchOption.AllDirectories)
.Where(file => items.Any(item => file.ToLower().EndsWith(item)));
Вы можете получить значения из ComboBox с помощью
var values = comboFileTypes.Items.Cast<string>()
и использовать их следующим образом:
var files = Directory
.EnumerateFiles(sourceDIR.Text, "*.*", SearchOption.AllDirectories)
.Where(s => values.Any(v => s.EndsWith(v, StringComparison.OrdinalIgnorecase));