Member 8024969 Ответов: 4

Мультифильтр с каталогом.EnumerateFiles


У меня возникли проблемы с получением следующей строки для работы с помощью VB.net 2013 год.

Dim files = каталог.EnumerateFiles(musicfolder, "*.конвертировать M4A;*.в формате mp3;*.метод MP2;*.и WAV;*.и WMA;*.ЧСВ;*.ОЗУ")

Есть линия equivelent, что будет работать для выполнения той же задачи?

PIEBALDconsult

Напишите свой собственный перечислитель, который выполняет каждый из них.

Sergey Alexandrovich Kryukov

Этот метод работает не так. Зачем это делать? Чего вы хотите достичь в конечном счете?
—СА

4 Ответов

Рейтинг:
2

OriginalGriff

Строка не будет работать, потому что нет возможности AFAIK указать несколько расширений в любом методе списка файлов каталогов: GetFiles и EnumerateFiles не принимают списки имен файлов, разделенные точкой с запятой.

Все, что вы можете сделать, это получить все файлы, а затем отфильтровать их.


Рейтинг:
1

PIEBALDconsult

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

Directory.EnumerateFiles(musicfolder)

Directory.EnumerateFiles(musicfolder, "*.m4a;*.mp3;*.mp2;*.wav;*.wma;*.cda;*.ram")

Directory.EnumerateFiles(musicfolder, "*.m4a;*.mp3;*.mp2" , "*.wav" , "*.wma;*.cda;*.ram")

Directory.EnumerateFiles(musicfolder, new string[] { "*.m4a;*.mp3;*.mp2" , "*.wav;*.wma" , "*.cda;*.ram" } )


public static partial class Directory
{
  public static System.Collections.Generic.IEnumerable<string>
  EnumerateFiles
  (
    string          Directory
  ,
    params string[] Pattern
  )
  {
    if ( ( Pattern == null ) || ( Pattern.Length == 0 ) )
    {
      Pattern = new string[] { "*" } ;
    }

    foreach ( string l in Pattern )
    {
      foreach ( string p in l.Split ( new char[] { ';' } , System.StringSplitOptions.RemoveEmptyEntries ) )
      {
        foreach ( string f in System.IO.Directory.EnumerateFiles ( Directory , p ) )
        {
          yield return f ;
        }
      }
    }

    yield break ;
  }
}


Рейтинг:
0

fernandochr

string[] recordedFiles = { "presence.", ".dll" };
                IEnumerable<string> files = Directory.EnumerateFiles(@"C:\temp\ServiceFiles", "*.*", SearchOption.TopDirectoryOnly)
                                                                    .Where(filesInDirectory => recordedFiles
                                                                    .Any(Recording => filesInDirectory.ToUpperInvariant()
                                                                    .Contains(Recording.ToUpperInvariant())));


Рейтинг:
0

la_morte

Используйте возможности Linq и EnumerateFiles в .net4

Dim filter As String = "*.csv;*.txt;*.pdf"
Dim filters() As String = filter.Split(";")

For Each fil As String In filters.AsParallel().SelectMany(Function(f) Directory.EnumerateFiles(n.FullName, f, SearchOption.AllDirectories)).OrderBy(Function(f) f).ToArray()
'here the result
Next     


CHill60

Хотя немного поздно