GetFiles mehre Formate!

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Cheffboss.

    GetFiles mehre Formate!

    Moin! :)
    Ich möchte gerne mit GetFiles, mehre Dateitypen suchen.
    Leider habe ich noch nicht rausgefunden, wie dies möglich ist!
    Kann mir jemand bitte helfen?
    BIG THX

    VB.NET-Quellcode

    1. Directory.GetFiles(strPfad, "*.jpg| *.bmp", SearchOption.AllDirectories)
    Visual Basic.NET 8o
    MS-SQL
    8o
    @Cheffboss Das musst Du einzeln machen:

    VB.NET-Quellcode

    1. Dim ll = New List(Of FileInfo)
    2. Dim di = New IO.DirectoryInfo("c:\Temp")
    3. ll.AddRange(di.GetFiles("*.png"))
    4. ll.AddRange(di.GetFiles("*.jpg"))
    5. ll.AddRange(di.GetFiles("*.bmp"))
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Falls du .Net 4.0 oder grösser verwendest, kannst du folgende Funktion verwenden.

    VB.NET-Quellcode

    1. Public Shared Function GetFiles(path As String, searchPatterns As String(), Optional searchOption As IO.SearchOption = IO.SearchOption.TopDirectoryOnly) As IEnumerable(Of String)
    2. Return searchPatterns.AsParallel().SelectMany(Function(searchPattern) IO.Directory.EnumerateFiles(path, searchPattern, searchOption)).Distinct()
    3. End Function

    Directory Search with multiple filters in .Net
    Ich habe nun diesen Code geschrieben. :)
    Wie kann ich diesen noch verbessern?
    Vielen Dank!

    (alter code entfernt...)

    edit:
    @NoIde
    Super!
    Daran habe ich gerade gar nicht gedacht.
    In Zukunft merke ich mir dies.
    Den der Code wird so viel leichter zu lesen, und viel kürzer!
    Vielen Dank! :thumbup:
    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Cheffboss“ ()

    So ist das deutlich kürzer.

    VB.NET-Quellcode

    1. Dim extensions() As String = {"*.jpg", "*.jpeg", "*.bmp", "*.emf", "*.gif", "*.tif", "*.png"}
    2. Dim searchPath As String = ""
    3. For Each extension In extensions
    4. For Each file In Directory.GetFiles(searchPath , extension, SearchOption.AllDirectories)
    5. Next
    6. Next
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Was ist schneller?
    7 mal GetFiles aufrufen für 7 verschiedene Extensions
    oder
    1 mal GetFiles aufrufen für *.* und danach alle Files prüfen, ob sie in die WhiteList eingetragen werden sollen?

    Ich denke, dass bei größeren Verzeichnis-Bäumen der zweite Weg schneller ist.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod
    Vielen Dank! :)
    Ich habe gerade die beiden Varianten getestet.
    Der Code der 7 mal die GetFiles aufruft, dauert 3ms.
    Der Code der alle "*.*" aufruft, dauert nur 1ms.
    Also ist dieser viel schneller!

    Hier der Code:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Try
    3. For Each file In Directory.GetFiles(searchPath, "*.*", SearchOption.AllDirectories)
    4. Try
    5. If file.EndsWith(".jpg") Or file.EndsWith(".jpeg") _
    6. Or file.EndsWith(".bmp") Or file.EndsWith(".emf") _
    7. Or file.EndsWith(".gif") Or file.EndsWith(".tif") _
    8. Or file.EndsWith(".png") Or file.EndsWith(".ico") Then
    9. ' Hier Einfügen!
    10. Me.ListBox1.Items.Add(file)
    11. End If
    12. Catch
    13. End Try
    14. Next
    15. Catch
    16. End Try
    17. End Sub

    Visual Basic.NET 8o
    MS-SQL
    8o
    @faxe1008
    Vielen Dank, jetzt ist der Code besser. ;)

    @an alle
    Vielen Dank, an euch! :)

    edit1:
    code verbessert!

    edit2:
    Der neue Code:

    VB.NET-Quellcode

    1. Private Sub SucheNachBilder(ByVal strPfad As String)
    2. Dim str_Endungen As String = ".jpg|.jpeg|.bmp|.emf|.gif|.tif|.png|.ico"
    3. Try
    4. For Each file In Directory.GetFiles(strPfad, "*.*", SearchOption.AllDirectories)
    5. Try
    6. If str_Endungen.Contains(Path.GetExtension(file)) Then
    7. Me.lstbGefundene.Items.Add(file)
    8. End If
    9. Catch
    10. End Try
    11. Next
    12. Catch
    13. End Try
    14. End Sub

    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Cheffboss“ ()

    Cheffboss schrieb:

    For Each en As String In arr_endungen
    If file.EndsWith(en) Then
    Me.lstbGefundene.Items.Add(file)
    End If
    Next
    Das war von @faxe1008 vermutlich eher so gedacht:

    Visual Basic-Quellcode

    1. If arr_endungen.Contains(Path.GetExtension(File)) Then
    2. Me.lstbGefundene.Items.Add(file)
    3. End If
    Dann kannst du dir die Schleife sparen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --