Dateien in Ordner und Unterordner suchen

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von TVX.

    Dateien in Ordner und Unterordner suchen

    !!! DAS PROBLEM IST DAS ER NUR DEN ERSTEN ORDNER DURCHSUCHT !!! ;(


    !!! Durchsucht alle Verzeichnisse !!!

    VB.NET-Quellcode

    1. Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click
    2. Me.FolderBrowserDialog3.ShowDialog()
    3. Pfad = Me.FolderBrowserDialog3.SelectedPath
    4. If Not Pfad.EndsWith("\") Then
    5. Pfad &= "\"
    6. End If
    7. Me.TextBox2.Text = Pfad
    8. If IO.File.Exists(TextBox3.Text) Then
    9. End If
    10. Path = (TextBox3.Text)
    11. Dim oDir As IO.DirectoryInfo
    12. On Error Resume Next
    13. oDir = New IO.DirectoryInfo(Me.TextBox2.Text) 'Hier wird sie Qelle angegeben
    14. ' alle Dateien des Ordners ermitteln
    15. ' und in der ListBox anzeigen
    16. Rekursiv(oDir)
    17. End Sub
    18. Private Sub Rekursiv(ByVal oDir As IO.DirectoryInfo)
    19. Dim oSubDir As IO.DirectoryInfo
    20. Dim oFile As IO.FileInfo
    21. ' zunächst alle Dateien des Ordners aufspüren
    22. For Each oFile In oDir.GetFiles(TextBox3.Text) 'Hier wird angegeben was gesucht wird
    23. With oFile
    24. ListBox1.Items.Add(.DirectoryName & "\" & .Name)
    25. End With
    26. Next
    27. ' Jetzt alle Unterverzeichnis durchlaufen
    28. ' und die Prozedur rekursiv selbst aufrufen
    29. For Each oSubDir In oDir.GetDirectories
    30. Rekursiv(oSubDir)
    31. Next
    32. TextBox3.Clear()
    33. TextBox3.Text = TextBox3.Text & "*."
    34. End Sub

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

    So hab"s jetz so weit das er alle Unterordner eines Ordners durchsucht,aber wenn ich zum beispiel c:\ hätte ich gern das er von da anfängt !


    Dim oDir As IO.DirectoryInfo
    On Error Resume Next
    oDir = New IO.DirectoryInfo(Me.TextBox2.Text) 'Hier wird sie Qelle angegeben
    ' alle Dateien des Ordners ermitteln
    ' und in der ListBox anzeigen
    Rekursiv(oDir)
    End Sub
    Private Sub Rekursiv(ByVal oDir As IO.DirectoryInfo)
    Dim oSubDir As IO.DirectoryInfo
    Dim oFile As IO.FileInfo


    ' zunächst alle Dateien des Ordners aufspüren
    For Each oFile In oDir.GetFiles(TextBox3.Text, IO.SearchOption.AllDirectories) 'Hier wird angegeben was gesucht wird
    With oFile
    ListBox1.Items.Add(.DirectoryName & "\" & .Name)
    End With
    Next
    Bitte den VBTag benutzen. Das kann sonst keiner lesen.
    Bitte kein On Error Resume Next benutzen.
    Suchen in Unterordnern kann man rekursiv machen...
    ... viel einfacher gehts mit:

    VB.NET-Quellcode

    1. For Each fileinfo1 As FileInfo In New DirectoryInfo(pfad).GetFiles("*", SearchOption.AllDirectories)
    2. '...
    3. Next

    Tipp: Benutze zum Speichern List(of FileInfo)


    Edit: hab deinen 2.Post nicht richtig gelesen.
    Was meinst du mit:
    aber wenn ich zum beispiel c:\ hätte ich gern das er von da anfängt !
    Ich wollte ja den vb tag nutzen der gibt aber offensichtlich nur 6 Zeilen aus ?(
    Das Problem liegt darin Ordner und alle Unterordner durchsucht er mir reibungslos,aber will ich die Suche vom Laufwerk aus starten kommt immer Zugriff verweigert egal ob c,d,e,f usw...

    Beispiel :

    C:\Users\zeus\Desktop ---- Das geht von da ab durchsucht er alles ! :thumbsup:


    c:\ ----- Geht nicht ,auch nicht d:\ oder e:\ er soll beides können Laufwerk + Ordner mit Unterordner ! ;(


    Fehler = Der Zugriff auf den Pfad "G:\System Volume Information" wurde verweigert.

    Wo er anfängt wirt später über einen FolderBrowser bestimmt !

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „TVX“ ()

    Wieso soll ich mir das Youtube Video ansehen? Beschreibe doch einfach in WORTEN was dein Programm können soll und wie du vorhast das zu implementieren.
    Man kann die UnauthorizedAccessException beim Suchen via SearchOption.AllDirectories zwar abfangen, dann wirft einen die Exception aber komplett raus.
    Das heißt, der ganze Befehl GetFiles wird abgebrochen.
    Die Lösung ist es mit rekursiver Suchfunktion zu arbeiten und dabei die UnauthorizedAccessException abzufangen.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim mypath As String = "C:\"
    3. Dim ListOfFiles As New List(Of FileInfo)
    4. CollectInfo(mypath, ListOfFiles)
    5. End Sub
    6. Private Sub CollectInfo(ByVal path As String, ByRef FileInfoList As List(Of FileInfo))
    7. Dim fileinfos As FileInfo()
    8. Try
    9. fileinfos = New DirectoryInfo(path).GetFiles("*")
    10. Catch ex As System.UnauthorizedAccessException
    11. Debug.WriteLine("Cannot List files in " & path)
    12. Exit Sub
    13. End Try
    14. For Each FileInfo1 As FileInfo In fileinfos
    15. FileInfoList.Add(FileInfo1)
    16. Next
    17. For Each dir As DirectoryInfo In New DirectoryInfo(path).GetDirectories
    18. CollectInfo(dir.FullName, FileInfoList)
    19. Next
    20. End Sub
    Ok das ist so weit so gut offensichtlich liegt mein Problem jetzt nur noch daran das er immer sagt ich habe keine Berechtigung auf usb stick mit 5 Unterordnern mit 5 Dateien darin gets doch auch :cursing:




    Wie ich die Rahmenfarbe meiner Form änder kann würde mich auch interessieren (NUR DER RAND )

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

    TVX schrieb:

    liegt mein Problem jetzt nur noch daran das er immer sagt ich habe keine Berechtigung auf usb stick mit 5 Unterordnern mit 5 Dateien darin gets doch auch
    ist das iwie schwer zu verstehen?
    Auf der Festplatte gibts einen versteckten System-Ordner (namens "System Volume Information" oderso), für den du kein Zugriffsrecht hast, und auch niemals bekommen wirst.
    Auf deim usb-Stick gibts so einen Ordner offensichtlich nicht.
    eine Lsg wird in post#5 gegeben, und wieso zum Kuckuck sollemer iwelche utube-videos angugge?
    Jetzt pass mal auf mein Freund. Die Leute versuchen Dir zu helfen. Wenn Du keine Hilfe willst, dann such Dir ein anderes Forum. Also pass Deinen Ton an und rede die Leute, die Dir am meisten helfen, nicht von der Seite an.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Das hat nichts mit Unfreundlichkeit zu tun das mal vorab, die Antwort die ich von (markus.obi)hatte war richtig und vor allen ne Antwort auf meine Frage !!!
    Das diese nicht zum erwünschten Erfolg führte ist leider so aber er hat sich mühe gegeben mir eine Antwort auf meine Frage zu geben und zwar Punkt genau !!! +++ SO SOLL ES SEIN !!!

    Und sein Vorschlag mit (Catch ua_ex As UnauthorizedAccessException ) kann ich trotzdem gut gebrauchen :thumbsup:

    Wenn ich etwas gefragt werde,beantworte ich die Frage und danach geb ich vielleicht noch en kleinen Hinweis zu Verbesserungen !

    Beispiel:
    Hans sagt: Ich kriege die Tür nicht zu !
    Und ich sag -- Im hoff brenns Licht !

    Das ist Scheiße !!!

    Richtig ist :
    Hans sagt: Ich krieg die Tür nicht zu !
    Und ich sag : Der Rahmen ist verzogen musst etwas fester drücken ,aber pass auf das licht brennt noch im Hoff !!!


    ODER ? ( Ich kann nur pb & cmd ,,, vb bin ich grade dabei )

    zu dem Tema was soll das Video ! Der Teil des Programms den ich hier einstellte war nur ein Bruchteil dessen Was daran hängt und 30 Sekunden video sind doch besser als ein buch zu lesen --und wens geht veröffentliche ich hier den ganzen code --Das ist selbstverständlich !

    Also bleibt mal locker ,wenn ich so ne Überschrift Lese (ist das iwie schwer zu verstehen?) denk ich halt dem steckt was Quer !!!
    Gegen hast du das nicht richtig verstanden ? , währe nichts einzuwenden Gewesen !
    Ich habe in 3 Tagen gelernt wie man in vb ´Dateien auslist und erstellt / sucht - wie man Textbox,Listboxe ,Label ,File & Folderbrowser schreibt und benutzt und dies alles untereinander verbindet und nutzen kann !


    :!: ALSO BITTE DES FRIEDENS WILLEN ENTSCHULDIGE ICH MICH AUCH BEI DEN LEUTEN DI SICH ANGEPISST FÜHLTEN :!:


    Wie gesagt,wie was sein muss das es Funktioniert verstehe ich weil ich vorher in anderer Sprache unterwegs war ,,, aber in VB bin ich fremd und der Syntags ist mir noch nicht geläufig ....( UND JA ICH BIN FÜR HIlFE DANKBAR )


    LG Andre .

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „TVX“ ()

    So und jetzt noch einmal und zwar schön sauber :!:

    Ich habe folgendes Problem :

    Ich suche mit folgenden code nach mp3 und co ,das funktioniert auch soweit super bis auf interne Festplatten

    Beispiel :

    H:\musik-mp3 -- Geht,, durchsucht alles + alle Unterordner

    H:\ ---- Fehlermeldung ( UnauthorizedAccessException )


    Auf usb stick geht f:\ ohne weiteres habe es mit zich Unterordnern getestet !

    Wenn ich den fehler abfange mit :

    VB.NET-Quellcode

    1. try
    2. 'Dein Code
    3. Catch ua_ex As UnauthorizedAccessException
    4. 'Exception: Zugriff wurde verweigert
    5. Catch ex As Exception
    6. 'Exception: Alle anderen außer Zugriff verweigert ;)


    Hab ich zwar keinen Fehler -- aber ebenfals auch kein Ergebnis !

    HIER DER CODE : Benötigt wird ( TextBox1 ,TextBox2 ,FolderBrowserDialog1 ,ListBox1 & Button1 Button2, )

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Me.FolderBrowserDialog1.ShowDialog()
    3. Pfad = Me.FolderBrowserDialog1.SelectedPath
    4. If Not Pfad.EndsWith("") Then
    5. Pfad &= ""
    6. End If
    7. Me.TextBox1.Text = Pfad
    8. End Sub
    9. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    10. If IO.File.Exists(TextBox1.Text) Then
    11. End If
    12. Path = (TextBox1.Text)
    13. Dim oDir As IO.DirectoryInfo
    14. oDir = New IO.DirectoryInfo(Me.TextBox1.Text) 'Hier wird sie Qelle angegeben
    15. ' alle Dateien des Ordners ermitteln
    16. ' und in der ListBox anzeigen
    17. Rekursiv(oDir)
    18. End Sub
    19. Private Sub Rekursiv(ByVal oDir As IO.DirectoryInfo)
    20. Try
    21. Dim oFile As IO.FileInfo
    22. ' zunächst alle Dateien des Ordners aufspüren
    23. For Each oFile In oDir.GetFiles(TextBox2.Text, SearchOption.AllDirectories) 'TextBox2.Text bergibt was gesucht wird !
    24. With oFile
    25. ListBox1.Items.Add(.DirectoryName & "\" & .Name)
    26. End With
    27. Next
    28. Catch ua_ex As UnauthorizedAccessException
    29. End Try
    30. End Sub



    HIER HAB ICH DEN SUCHER AUS MEINEM PROGRAMM EXTRAHIERT UND EXTRA ZUM TESTEN IN NE FORM GEPACKT ( ERSTELLT MIT VB2012 ) - !!! IST DIE PROJEKTMAPE !!!
    LINK:
    NACH DATEIEN SUCHEN TEST TEIL 1.rar - Size: 0.07 MB

    www26.zippyshare.com/v/82521749/file.html

    Jede Mühe um diesen Code aufzuwerten sei euch Gedankt im Voraus :!:

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

    Nun, ein Missverständnis meinserseits war, dassich davon ausging, das markus.obi eine funktionierende Funktion produziert, wennersich schon die Mühe macht, eine Rekursion zu coden. Hatter aber nicht, und ist deinen Äußerungen auch nicht klar zu entnehmen, dass sein Code genauso scheitert wie deiner, und in welcher Zeile, und mit welcher Fehlermeldung (5 Regeln für sinnvolle Fragen)

    Jo, also eine funktionierende Aufsammel-Funktion für Dateien findeste in RecursiveFileSearch.

    Edit Zum "IssnDas schwer zu verstehen": Den ganzen Thread beklagst du dich, dass deine Suche in C:\ scheitert, und kann doch nicht sein, weil in anneren Ordnern und Laufwerken gehts doch auch, und muß doch möglich sein usw.

    Und da denkichwirklich IssnDasSchwerZuVerstehen. Der Fehler sagt dir klipp und klar, auf C:\System Volume Information kannst du nicht zugreifen, und markus sagts dir auch nochmal, aber das perlt von dir ab wie Wasser vonne Ente.

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

    Da in diesem Post keine Frage zu finden ist, werd ich gleich mit den Hinweisen weitermachen:

    - Frag beim FolderBrowserDialog immer ab ok OK gedrückt wurde. Sonst kann das auf einen Fehler laufen, falls Abbrechen gedrückt wird.

    VB.NET-Quellcode

    1. If Me.FolderBrowserDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
    2. Pfad = Me.FolderBrowserDialog1.SelectedPath
    3. End if


    - Dieses

    VB.NET-Quellcode

    1. If Not Pfad.EndsWith("") Then
    2. Pfad &= ""
    3. End If

    ist unnötig.

    - Textboxen werden nicht für Datenspeicher verwendet. Dazu gibt Variablen

    VB.NET-Quellcode

    1. Dim s as String = "irgendwas"


    - Dieses

    VB.NET-Quellcode

    1. If IO.File.Exists(TextBox1.Text) Then
    2. End If

    kannst dir schenken.

    - oFile in deinem Code unterstützt die Eigenschaft "FullName" die den gesamten Pfad (inkl. Dateinamen) ausliest.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    ErfinderDesRades : Wäre es nur auf c:\ würde ich es auch noch verstehen aber es betrifft alle internen festplatten wen ich sie so anspreche c:\ ,,,d:\,,,e:\und so weiter .

    Gehe ich auf c:\musik geht es !

    Der Zugriff auf den Pfad "H:\$RECYCLE.BIN\S-1-5-21-3154009958-2815832667-437563348-1000" wurde verweigert.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Me.FolderBrowserDialog1.ShowDialog()
    3. Pfad = Me.FolderBrowserDialog1.SelectedPath
    4. If Not Pfad.EndsWith("") Then
    5. Pfad &= ""
    6. End If
    7. Me.TextBox1.Text = Pfad
    8. End Sub
    9. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    10. If IO.File.Exists(TextBox1.Text) Then
    11. End If
    12. Path = (TextBox1.Text)
    13. Dim oDir As IO.DirectoryInfo
    14. oDir = New IO.DirectoryInfo(Me.TextBox1.Text) 'Hier wird sie Qelle angegeben
    15. ' alle Dateien des Ordners ermitteln
    16. ' und in der ListBox anzeigen
    17. Rekursiv(oDir)
    18. End Sub
    19. Private Sub Rekursiv(ByVal oDir As IO.DirectoryInfo)
    20. Try
    21. Dim oFile As IO.FileInfo
    22. ' zunächst alle Dateien des Ordners aufspüren
    23. For Each oFile In oDir.GetFiles(TextBox2.Text, SearchOption.AllDirectories) --- !!! HIER TRETEN DIE FEHLER AUF -WELCHE SIHE LISTE FEHLER UNTEN !!!
    24. With oFile
    25. ListBox1.Items.Add(.DirectoryName & "\" & .Name)
    26. End With
    27. Next
    28. Catch ua_ex As UnauthorizedAccessException
    29. End Try
    30. End Sub


    FEHLERLISTE:
    1.=Der Zugriff auf den Pfad "C:\Config.Msi" wurde verweigert.
    2.=Der Zugriff auf den Pfad "H:\$RECYCLE.BIN\S-1-5-21-3154009958-2815832667-437563348-1000" wurde verweigert.
    3.=Der Zugriff auf den Pfad "G:\$RECYCLE.BIN\S-1-5-21-1867289505-225061253-3569253768-1000" wurde verweigert.

    Verwende ich den catch Befehl entsteht zwar kein Fehler aber er list das Laufwerk trotzdem nicht aus :cursing:

    Folgende Einstellungen wurden erfolglos versucht !

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    <requestedExecutionLevel level="highestAvailable" uiAccess="false" />

    GIBT ES IN VB2012 EINE UVA EINSTELLUNG ODER SO WAS ?

    :?: :?: :?: NUN DIE FRAGE: WIE KANN ICH MEINEN VORGEGEBENEN COD SO ÄNDERN DAS ER KEIN PROBLEM MEHR DAMIT HAT :?: :?: :?:

    Das Problem haben laut Google viele Leute !

    UND SCHWAMM DRÜBER ICH HAB EUCH AU ALLE :love:
    und noch einmal: nein, es gibt keine Einstellung dafür. Wenn du kein Zugriffsrecht hast, hast du kein Zugriffsrecht.
    C:\System Volume Information ist nicht der einzige verbotene Ordner.
    Und es gibt auch keine Aufstellung, wo diese Ordner rumhängen und wo nicht.

    Eine (funktionierende!) Lösung habe ich in post#14 verlinkt.

    Deine "Nun die Frage" beantworte ich dir nicht, jdfs. nicht unentgeldlich.

    Und ich hab dich auch lieb :D

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

    ErfinderDesRades - Du bischt doch e ganz netter du musst nur mal etwas entspannter werden :thumbsup:

    Ich habs jetzt Funktioniert es :!:

    [vbImports System.IO
    Public Class Form1

    Private Property Path As Object
    Private Property Pfad As String

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    TextBox2.Text = "*.mp3"
    End Sub
    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    End Sub
    Private Sub TextBox2_TextChanged_1(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
    End Sub
    Private Sub FolderBrowserDialog1_HelpRequest(sender As Object, e As EventArgs) Handles FolderBrowserDialog1.HelpRequest
    End Sub
    Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    End Sub


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ListBox1.Items.Clear()
    If Me.FolderBrowserDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
    Pfad = Me.FolderBrowserDialog1.SelectedPath
    End If
    Me.TextBox1.Text = Pfad
    End Sub


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim oDir As IO.DirectoryInfo
    oDir = New IO.DirectoryInfo(Me.TextBox1.Text)

    For Each subdir In oDir.GetDirectories()
    My.TextBox1.Text = subdir.FullName.ToString
    Try
    For Each sFile As String In My.Computer.FileSystem.GetFiles(My.TextBox1.Text, FileIO.SearchOption.SearchAllSubDirectories, TextBox2.Text)
    ListBox1.Items.Add(sFile)
    Next
    Catch ua_ex As UnauthorizedAccessException
    Catch ex As Exception
    End Try
    Next
    End Sub


    End Class][/vb]

    Erfinder des Rads deine Lösung kommt auch ins Archiv :thumbsup:

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „TVX“ ()

    ErfinderDesRades schrieb:

    Nun, ein Missverständnis meinserseits war, dassich davon ausging, das markus.obi eine funktionierende Funktion produziert, wennersich schon die Mühe macht, eine Rekursion zu coden. Hatter aber nicht, und ist deinen Äußerungen auch nicht klar zu entnehmen, dass sein Code genauso scheitert wie deiner, und in welcher Zeile, und mit welcher Fehlermeldung (5 Regeln für sinnvolle Fragen)


    Nur so fürs Protokoll, mein Code funktioniert doch (Post #5)? Oder etwa nicht???