Fehler bei .EnumerateFiles / .GetFiles-Methode

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    Fehler bei .EnumerateFiles / .GetFiles-Methode

    Hallo liebe Community,

    ich hab ein kleines Problem, wo ich aus den MS Docs nicht wirklich schlau werde und auch sonst mir Google/Bing nichts brauchbares ausspuckt. Ich möchte eine Liste mit den Dateinamen in einem Ordner inklusive Unterordner haben, mit mehreren speziellen Dateiendungen.

    Hier mein Versuch:

    VB.NET-Quellcode

    1. Dim GeholteDateien As New List(Of String)
    2. GeholteDateien.AddRange(System.IO.Directory.EnumerateFiles(mp3Path, "*.*", FileIO.SearchOption.SearchAllSubDirectories).Where(Function(s) s.ToLower.EndsWith(".mp3") OrElse s.ToLower.EndsWith(".flac") OrElse s.ToLower.EndsWith(".ogg") OrElse s.ToLower.EndsWith(".opus") OrElse s.ToLower.EndsWith(".wma") OrElse s.ToLower.EndsWith(".wav") OrElse s.ToLower.EndsWith(".wv") OrElse s.ToLower.EndsWith(".alac") OrElse s.ToLower.EndsWith(".aac") OrElse s.ToLower.EndsWith(".aac+")))


    Leider kommt sowohl bei .EnumerateFiles wie auch .GetFiles der Fehler:

    Der Enumerationswert lag außerhalb des gültigen Bereichs. Parametername: searchOption (was ja wohl FileIO.SearchOption.SearchAllSubDirectories ist...)

    Obwohl mir das IntelliSense sogar vorschlägt....

    Wäre froh wenn mir jemand sagen könnte woran das liegt.... :)
    Die OrElse Abfragen kann man übersichtlicher machen.
    SearchAllSubDirectories gibt es nicht.

    ich würde es so lösen;

    VB.NET-Quellcode

    1. Dim FileTypes = {".mp3", ".flac", ".ogg", ".opus", ".wav", ".wv", ".alac", ".acc", ".aac+"}
    2. Dim GeholteDateien As New List(Of String)
    3. GeholteDateien.AddRange(From q In New IO.DirectoryInfo(mp3Path).GetFiles("*.*", IO.SearchOption.AllDirectories)
    4. Where Not String.IsNullOrEmpty(q.Extension) AndAlso FileTypes.Contains(q.Extension.ToLower)
    5. Select q.FullName)

    BlueLagoonX schrieb:

    SearchAllSubDirectories gibt es nicht.

    Das gibts schon, ist aber Microsoft.Visualbasic.FileIO.SearchOption

    und das stört ihn auch in der Methode Directory.EnumerateFiles, die möchte nämlich IO.SearchOption

    Vielleicht schlägt das Studio es nicht vor, wenn man Microsoft.Visualbasic Verweis rausnimmt?

    Hab auch gehört, wenn man nicht alles aus der Directory möchte, sondern nur Teile, dann ist EnumerateFiles besser. Aber habe da keine Analyse drüber.
    Aber ich sammle zum Beispiel nur die zuletzt bearbeitete Datei eines Ordners ein und da läuft EnumerateFiles besser als GetFiles
    (wobei das ist bei mir nochmal was anderes, ich brauch DirectoryInfo.EnumerateFiles, die sammelt die FileInfo nicht nur den Namen)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    docs.microsoft.com/de-de/dotne…io.directoryinfo.getfiles
    -> searchPattern für die Dateiendung Eingrenzung
    -> searchOption um die Subdirectories zu berücksichtigen
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @Haudruferzappeltnochnull
    Ja der Unterschied zwischen GetFiles und EnumerateFiles ist wohl auch, dass man bei EnumerateFiles wohl schon, während die Suche noch läuft, drauf zugreifen kann und bei GetFiles erst alles ausgelesen wird, wenn ich das richtig verstanden habe...

    @mrMo
    Problem mit SearchPattern in meinem Fall: Ich möchte ja nach mehreren Dateitypen suchen, nicht nur nach einem... Hab hier im Forum auch irgendwo gelesen, dass das so wohl nicht geht:
    "*.mp3, *.wav" usw. ...