Eine bessere GetFiles Methode aus System.IO.Directory

    • VB.NET
    • .NET (FX) 3.0–3.5

    Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

      Eine bessere GetFiles Methode aus System.IO.Directory

      Hallo,

      wie schon einmal in diesem Unterforum geschrieben liebe ich Extensions.
      Leider geht das bei der Directory-Klasse aus dem System.IO Namespace nicht, da die Methoden dieser Klasse static sind.

      Macht aber nichts - dann schreiben wir uns halt einen Wrapper.

      Die Ursprüngliche GetFiles Methode aus System.Io.Directory hat ihre Mängel, deshalb verbessern wir das.

      C#-Quellcode

      1. /// <summary>
      2. /// Wrapper für die Directory Klasse
      3. /// </summary>
      4. public static class Directory
      5. {
      6. /// <summary>
      7. /// Überschreibt die GetFiles Methode der Directory Klasse um die GetFiles Methode einfacher und sicherer zu machen
      8. /// </summary>
      9. /// <param name="folder">Ordner der Durchsucht werden soll</param>
      10. /// <param name="extensions">Liste von Erweiterungen die gesucht werden sollen, die Erweiterungen werden mit '|' getrennt und ohne * geschrieben</param>
      11. /// <returns>Ein Array mit den gefundenen Dateien</Returns>
      12. public static string[] GetFiles(string folder, string extensions)
      13. {
      14. List<string> result = new List<string>();
      15. if (string.IsNullOrEmpty(extensions))
      16. {
      17. return GetFiles(folder);
      18. }
      19. foreach (string extension in extensions.Split("|".ToArray(), StringSplitOptions.RemoveEmptyEntries))
      20. {
      21. result.AddRange(System.IO.Directory.EnumerateFiles(folder).Where(x => x.EndsWith(extension, StringComparison.OrdinalIgnoreCase)));
      22. }
      23. return result.ToArray();
      24. }
      25. /// <summary>
      26. /// Überschreibt die GetFiles Methode der Directory Klasse um die GetFiles Methode einfacher und sicherer zu machen
      27. /// </summary>
      28. /// <param name="folder">Ordner der Durchsucht werden soll</param>
      29. /// <returns>Gibt alle Dateien des angegebenen Ordners als Array zurück</returns>
      30. public static string[] GetFiles(string Folder)
      31. {
      32. return System.IO.Directory.EnumerateFiles(folder).ToArray();
      33. }
      34. }


      Der Aufruf erfolgt etwa so

      C#-Quellcode

      1. string[] files = Directory.GetFiles(myFolder, myExtensions);


      Gruss

      mikeb69

      ~blaze~: Thema verschoben

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

      2 Anmerkungen:
      1. C#-Quellcode

        1. foreach (string extension in extensions.Split("|".ToArray(), StringSplitOptions.RemoveEmptyEntries)) {
        2. result.AddRange(System.IO.Directory.EnumerateFiles(folder).Where(x => x.EndsWith(extension, StringComparison.OrdinalIgnoreCase)));
        3. }
        ist unwirtschaftlich.
        Bei 10 extensions wird das Directory 10 mal enumeriert - dabei täte reichen, es nur einmal durchzunudeln
      2. Wieso verwendest du nicht DirectoryInfo/FileInfo?
        Die kosten auch nicht mehr, bieten aber viel reichhaltigere Möglichkeiten - .Exists, .Attributes, .Name (ohne Pfad), .Extension, File-Size, .LastChangeTime, .Delete, .Move, etc. - all das kann dort direkt abgerufen werden, ohne jeden weiteren Klimmzug.
        Erweiterungen kann man dazu ebensogut schreiben, wenn nicht noch besser.

        Hier mal Überblick aussm ObjectBrowser, was alles geboten ist:
        FileInfo:


        DirectoryInfo:


        Basisklasse FileInfo (diese Member gibts also zusätzlich, in beiden obigen Klassen):


        Ich hätte schon längst ein Tut dazu gemacht, wenns dazu was zu erklären gäbe.
        Aber ist eiglich alles selbsterklärend (bis auf paar Ausnahmen, die man imo eh nie braucht).

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()