2016-12-13 3 views
0

Мне нужно отфильтровать некоторые файлы в каталоге. Я должен фильтровать различные файлы с разными расширениями, но один из них «? B». Пример 29389.99b или 382802.03b. Для других файлов он отлично работает, но как я могу отфильтровать это? I'm с помощьюDirectory.EnumerateFiles с специальными фильтрами

var files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories) 
    .Where(s => s.EndsWith(".??b") || s.EndsWith(".in") || s.EndsWith(".txt")); 

Благодарности

+0

взглянуть на эту регистрацию, а также сделать простой поиск Google на следующих 'Directory.EnumerateFiles() Method' http://stackoverflow.com/questions/3754118/how-to-filter-directory -enumeratefiles-with-multiple-criteria также видят, есть ли метод 's.Contains', который вы можете использовать в инструкции лямбда – MethodMan

+0

, вы также можете посмотреть что-то вроде этого, например, ' var resultFileNames = (from fileInfo в новой директории DirectoryInfo (@path) .GetFiles (". b") выберите fileInfo.Name) .ToList(); ' – MethodMan

ответ

1

Проверьте длину удлинения и последнюю букву.

var files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories) 
    .Where(s => 
    { 
     string ext = Path.GetExtension(s); 
     return ext.Length == 4 && ext.EndsWith("b") 
      || s.EndsWith(".in") 
      || s.EndsWith(".txt"); 
    }); 
1

Вы можете решить эту проблему с помощью регулярных выражений. Следующий код может помочь вам.

var files = Directory.EnumerateDirectories(path).Where(s => Regex.IsMatch(s, @"(.*)\.+.{2}b$")); 
+0

' \ w' не соответствуют, например, '-'. Шаблон может быть намного проще: '@" \ ... b $ "' –

+0

Код проверен на проект .net 4.5. Код работает. – mfatih

+0

'\ w' шаблон не включает все допустимые символы пути. –

Смежные вопросы