Jpeg Dateien suchen und Pfad auslesen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von n1234n.

    Hallo Gutelaunetyp,

    Versuchs mal so:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System. :pinch: ) Handles Button1.Click
    4. Try
    5. ListBox1.Items.AddRange(IO.Directory.GetFiles("C:\", "*.jpg", IO.SearchOption.AllDirectories))
    6. Catch ex As Exception
    7. MsgBox(ex.Message)
    8. End Try
    9. End Sub
    10. End Class


    Bei mir funktioniert es nicht ganz weil ein Pfad verweigert wird.. :pinch:
    Ich habe hier ein Beispiel von Elmar Boye (msdn)
    der sucht recursive und berücksichtiget verbotene Verzeichnisse. Gibt die eine Liste wieder.
    super teil
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Elmar Boye fileHelper. Pfad as String sucht Recursive, SearchPatterns "*.png;*.exe"
    3. ''' </summary>
    4. ''' <param name="path"></param>
    5. ''' <param name="searchPatterns"></param>
    6. ''' <returns></returns>
    7. ''' <remarks></remarks>
    8. Public Shared Function Finde_Dateien_In_Verzeichnis(ByVal path As String, ByVal searchPatterns As String) As List(Of String)
    9. ' fileHelper von Elmar Boye, Beschreibung in BS_Tool_Box unter Bs_Libray;Finde_Dateien_In_Verzeichnis
    10. ' Aufrufbeispiel: Finde
    11. If path Is Nothing Then
    12. Throw New ArgumentNullException("path")
    13. End If
    14. path = path.Trim()
    15. If path.Length = 0 Then
    16. Throw New ArgumentException("path")
    17. End If
    18. If String.IsNullOrEmpty(searchPatterns) Then
    19. Throw New ArgumentNullException("searchPatterns")
    20. End If
    21. ' Anfangspfad vorgeben (hier mögliche Ausnahme)
    22. path = System.IO.Path.GetFullPath(path)
    23. Dim fileList As New List(Of String)
    24. ' Trennen der Suchmuster
    25. Dim searchPatternList As New List(Of String)
    26. For Each pattern As String In searchPatterns.Split(";"c)
    27. pattern = pattern.Trim()
    28. If pattern.Length > 0 Then
    29. searchPatternList.Add(pattern)
    30. End If
    31. Next
    32. If searchPatternList.Count = 0 Then
    33. Return fileList
    34. End If
    35. Dim directoryStack As New Stack(Of String)
    36. directoryStack.Push(path)
    37. ' Verzeichnisse rekursiv (via Stack) durchlaufen
    38. Do While directoryStack.Count > 0
    39. Dim directory As String = directoryStack.Pop()
    40. Try
    41. ' Durchlaufen aller Suchmuster
    42. For Each pattern As String In searchPatternList
    43. ' ... und zur Dateiliste hinzufügen
    44. fileList.AddRange(System.IO.Directory.GetFiles(directory, pattern))
    45. Next
    46. Catch ex As UnauthorizedAccessException
    47. System.Diagnostics.Debug.WriteLine("No File Access " & directory)
    48. ' Kein Zugriff
    49. End Try
    50. ' Einfügen der Unterverzeichnisse in den Stack
    51. Try
    52. For Each subDirectory As String In System.IO.Directory.GetDirectories(directory)
    53. directoryStack.Push(subDirectory)
    54. Next
    55. Catch ex As UnauthorizedAccessException
    56. ' Kein Zugriff
    57. System.Diagnostics.Debug.WriteLine("No Directory Access " & directory)
    58. End Try
    59. Loop
    60. ' Sortiert die Dateinamen
    61. fileList.Sort(StringComparer.OrdinalIgnoreCase)
    62. Return fileList
    63. End Function
    Hallo ,
    leider kann ich mit dem Code von markushettmann , die Dateien unter Vista nicht in die Listbox adden.


    Die Standardfehlermeldung kommt immer & immer wieder : Der Zugriff auf Blabla wurde verweigert.


    Edit : Es liegt am sch**** Windows Vista , immer Zugriff verweigert.


    Danke im Vorraus.


    Mfg Kevin.

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

    Es hat nichts damit zu tun ob du adminrechte hast oder nicht sondern ob das Programm adminrechte hat.
    Und tuhe uns ein gefallen schreib nicht so Bunt und nicht rot (rot ist für mods), praktisch wäre es auch wenn du bei einer Schriftrgröße bleibst.

    Edit:
    Wenn ich mich nicht irre dannmuss Uiacess auf True.
    Kannst das Programm auch mit rechtsklick als Adminestrator ausführen starten.
    Ignorierern tuhst du den Fehler wenn du eine Leere Catch in einer Try anweisung benutzt also:

    VB.NET-Quellcode

    1. Try
    2. Catch ex as Exception
    3. ' Nix bzw. dein Programm könnte mit der ex.message eine Fehlermeldung in eine Datei schreiben (keine Msgbox oder so)
    4. End Try
    Ich habe vergessen zu erwähnen wie du die Finktion nutzt, vieleciht hast du sie deshalb nicht versucht.
    Kopieren die Funktion (aus Post 3) in dein Projekt(Klasse) 1:1 rein. ohne eine änderung daran vorzunehmen.
    Dann rufst du die Funktion wie folgt auf:

    VB.NET-Quellcode

    1. For Each Item As String In Finde_Dateien_In_Verzeichnis("C:\", "*.jpeg")
    2. ListBox1.Items.Add(Item)
    3. Next

    Ich gehe davon aus das deine ListBox ListBox1 heist, ansonsten ändere es ab.
    Dir muss aber bewusst sein, das wenn du die ganze Platte C:\ durchsuchen lässt, das es ohne weiteres ca. 2 - 3 Minuten in anspruch nehmen kann.

    ansonsten läuft diese Funktion einwandfrei.
    Schau dir mal diesen Thread an:
    [VB.NET] Rekursives durchsuchen der Festplatte unter verwendung des Backgroundworkers
    Hiermit müsste es wunderbar funktionieren :thumbsup:
    bei button1_Click nur in:

    VB.NET-Quellcode

    1. Dim arg() As String = {Dein Pfad, "*" + ein teil des namens des Bildes + "*" + "*.JPG*"}
    2. bgw.RunWorkerAsync(arg)

    Wenn du alle bilder aufrufen willst nur

    VB.NET-Quellcode

    1. Dim arg() As String = {Dein Pfad, "*.JPG*"}

    So müsste es Funktionieren


    Lg

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