Динамически добавляем .EndsWith () из выпадающего списка

Для Eclipse работало следующее выражение:

Foo

jadajada Bar "

Регулярное выражение:

Foo[\S\s]{1,10}.*Bar*
5
задан Chud37 16 January 2019 в 09:30
поделиться

5 ответов

Другая возможность, будет использовать шаблон поиска. К сожалению, невозможно найти несколько шаблонов одновременно. Но вы можете использовать SelectMany для сканирования списка шаблонов и свести результаты поиска в один список:

var allPatterns = comboFileTypes.Items.Cast<string>();
allPatterns.SelectMany(pattern => Directory.EnumerateFiles(@"F:\temp", $"*.{pattern}", SearchOption.AllDirectories));

Имена файлов будут упорядочены как список шаблонов

0
ответ дан Mong Zhu 16 January 2019 в 09:30
поделиться

Ну, может быть, я упускаю что-то большое, но ...

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;
}

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

0
ответ дан Baltasarq 16 January 2019 в 09:30
поделиться

Получить все расширения из выпадающего списка:

 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));
0
ответ дан Pablo notPicasso 16 January 2019 в 09:30
поделиться

попробуйте этот код:

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)));
0
ответ дан Ebraheem 16 January 2019 в 09:30
поделиться

Вы можете получить значения из 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));
0
ответ дан Marcin Topolewski 16 January 2019 в 09:30
поделиться
Другие вопросы по тегам:

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