Ordner Suche auf Laufwerk und öffnen im Explorer

  • VB.NET

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von Felwebel.

    Ordner Suche auf Laufwerk und öffnen im Explorer

    Hallo zusammen,

    das ist mein erster Eintrag hier bitte seid nachsichtig mit mir ich bin absoluter Anfänger, ich hab auch schon gegoogelt aber irgendwie komme ich da auch nicht zurecht mit dem was ich da finde, ich hoffe ihr könnt mir helfen.

    Ich möchte ein kleines such Programm für meine Arbeit schreiben, es soll in einem Ordner auf dem Laufwerk nach anderen Ordner gesucht werden die unterschiedlich Namen haben wenn der bestimmte Ordner gefunden wurde soll er mit doppelklick geöffnet werden.

    Also ich habe eine Textbox wo ich den Namen eingebe mit einem Button Starte ich die Suche dann und in einer List Box wird das Suchergebnis dann angezeigt, mit einem Doppelklick in der Listbox auf das Suchergebnis öffnet such der Entsprechende Ordner im Explorer.

    Mein Code bis jetzt ist:

    Public Class Form1

    Private Sub btnSuche_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSuche.Click
    ListBox1.Items.Clear()
    For Each Suchen As String In My.Computer.FileSystem.GetFiles("Z:\xxx\xxx\xxx\xxx", FileIO.SearchOption.SearchAllSubDirectories, "*" + TextBox1.Text + "*.*")
    ListBox1.Items.Add(Suchen)
    Next

    End Sub

    Private Sub ListBox1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
    Process.Start(ListBox1.Text)

    End Sub

    End Class


    Wenn ich den Code mit einer Suche ausführe bsp "Jens" werden mir in der Listbox aber alle des Laufwerks angezeigt angezeigt ich hätte aber gerne das nur der Ordner Jens angezeigt wir ohne Pfadangabe, wäre das möglich so wie ich mir das vorstelle?

    Danke für eure Hilfe

    VB.NET-Quellcode

    1. Private Sub btnSuche_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSuche.Click
    2. ListBox1.Items.Clear()
    3. For Each Suchen As String In My.Computer.FileSystem.GetFiles("Z:\xxx\xxx\xxx\xxx", FileIO.SearchOption.SearchAllSubDirectories, "*" + TextBox1.Text + "*.*")
    4. ListBox1.Items.Add(Suchen)
    5. Next


    1. Problem, dein Programm hängt, weil nur ein Thread. Aber jetzt unwichtig.

    Das Problem ist, du deklarierst jede zu-suchende Datei als String und fügst diesen der ListBox hinzu.
    Du musst erst überprüfen ob das gefunde Objekt (in deinem Fall String) auch dein Schlüsselwort enthält - und im Nachgang der Listbox hinzufügen.

    Desweiteren verwendest du

    VB.NET-Quellcode

    1. My.Computer.FileSystem.GetFiles


    anstatt

    VB.NET-Quellcode

    1. My.Computer.FileSystem.GetDirectories


    Nimm das, dann klappt das:

    VB.NET-Quellcode

    1. Private Sub btnSuche_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSuche.Click
    2. ListBox1.Items.Clear()
    3. For Each Suchen As String In My.Computer.FileSystem.GetDirectories("Z:\xxx\xxx\xxx\xxx", FileIO.SearchOption.SearchAllSubDirectories, "*" + TextBox1.Text + "*.*")
    4. If Suchen.Contains(Textbox1.Text) then
    5. ListBox1.Items.Add(Suchen)
    6. End If
    7. Next

    Ja ich habe es verstanden hast es ja super erklärt danke,

    nur ein Problem noch es werden jetzt in der listbox alle Ordner angezeigt die Ordner die gesucht werden sollen enthalten auch noch Ordner die sollen in der Listbox aber nicht angezeigt werden kann man das irgendwie beschränken das Ordner öffnen?

    Des weiteren wird in der Listbox der Kommplette Pfad angezeigt kann man auch nur die Ordner Anzeigen die man auswählen kann?
    Guten Morgen,

    wegen meinem Problem das alle Ordner angezeigt werden vielleicht hängt es mit der Baumstruktur der Ordner zusammen?

    und die ist

    Ordner 1 --> Ordner --> Ordner 3 --> jetzt soll nach einem Ordner gesucht werden xyz --> in dem Ordner xyz befinden sich nochmal 4 Ordner und die heißen xyz-1, xyz-1, xyz-1, xyz-1

    Es soll aber nur der Hauptordner xyz gefunden und in der Lustbox angezeigt werden.

    Ich komm jedenfalls nicht weiter.

    Danke schon mal an alle die bis hierher geholfen haben
    Dann ist dein ganzer Code aber obsolet!

    Wenn du in der Listbox nur den relativen Pfad (Ordnername) stehen haben willst, dann bringt dir dein Doubleclick Event auch nichts mehr.
    Denn sobald du ein Item in der Listbox auswählst, übergibt er den String an die Windows API - diese kann mit absoluten Pfaden ("L:\Ordner") was anfangen - aber mit Strings alâ (Ordner) überhaupt nichts.
    Was ich dir anbieten kann, dass der Ordner so gefunden wird:

    Suche: Ordner
    Ergebnis: Z:\Ordner
    Ergebnis: Z:\Garnichts\nochvielweniger\Ordner

    Also, dass die Rekursion nach einem Fund gebrochen wird, willst du es anders haben, musst du das Projekt von neu und auf eine andere Art beginnen - siehe den Link von ErfinderDesRades, Thema .FileInfos.
    Ok danke, dann muss ich es anders machen.

    Würde es gehen wenn ich die Listbox weglasse also nur Button und Textfeld, quasi so das nach der Sucheingabe xy1 ein Ordner nach dem Ordner xy1 durchsucht wir und der Ordner xy1 wenn er gefunden wird gleich auch geöffnet wird?

    Und wenn er ihn nicht findet Msg Box Ordner nicht gefunden mit der Lösung könnte ich mich auch anfreunden

    Felwebel schrieb:

    Ich bin gerade am probieren
    Bevor Du auch nur eine Zeile Code schreibst, solltest Du Dir zunächst einen detaillierten Plan machen.
    Da wird noch keine einzige Zeile Code geschrieben.
    Das geplante Gesamtprojekt zerlegst Du dann in disjunkte Teilprojekte, die Du jedes einzeln in je einem kleinen Testprogramm bearbeitest. Dazu könntest Du je einen Thread hier aufmachen.
    Wenn alle Teilprojekte zu Deiner Zufriedenheit gelöst wurden, fügst Du sie zu einem neuen Gesamtprojekt zusammen.
    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!

    Felwebel schrieb:

    nichts großes machen
    Formulier mal eine richtige Aufgabenstellung, so präzise, dass eine Aussage hinterher wie "Das soll aber ganz anders sein" und so nicht vorkommen kann.
    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!
    naja - wir können die unklarheit der Aufgabe auch dadurch herausarbeiten, dass wir sie beantworten

    Felwebel schrieb:

    einen Ordner nach einem anderen Ordner durchsuchen und wenn er vorhanden ist soll er sich öffnen
    Da "sich öffnen" noch nicht definiert ist ergibt sich folgende Lösung

    VB.NET-Quellcode

    1. dim diZiel = new DirectoryInfo("einen Ordner").GetDirectories("anderen Ordner")


    ach guck, unter "sich öffnen" könnte ich noch folgendes anbieten:

    VB.NET-Quellcode

    1. Dim diZiel = New DirectoryInfo("einen Ordner").GetDirectories("anderen Ordner")
    2. If diZiel.Length > 0 Then
    3. Process.Start(diZiel(0).FullName)
    4. End If

    Aufgabe:

    Form1 enthält Button und Textbox

    Wenn in der Textbox "xyz1" eingeben wird, und der Button gedrückt wird, soll sich der Ordner "xyz1" öffnen, da wo der Ordner "xyz1" liegt liegen 300 Ordner die alle anders heißen und diese Ordner will ich suchen mit der Textbox, wenn ich dann als nächstes z.b im die Textbox "hallo" eingebe öffnet sich der Ordner hallo der sich im gleichen Ordner wie "xyz1" befindet usw.

    Der Ordner xyz1 befindet sich auf dem Netzlaufwerk der Pfad dahin ist: Z:\bla\bla\bla\bla.

    Ich hoffe ich hab mich jetzt ein bisschen besser ausgedrückt und danke für die Geduld mit mir an alle
    @Felwebel So was:

    VB.NET-Quellcode

    1. Dim path = "Z:\bla\bla\bla\bla\" & TextBox1.Text
    2. If IO.Directory.Exists(path) Then
    3. Process.Start(path)
    4. End If
    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!

    RodFromGermany schrieb:

    @Felwebel So was:

    VB.NET-Quellcode

    1. Dim path = "Z:\bla\bla\bla\bla\" & TextBox1.Text
    2. If IO.Directory.Exists(path) Then
    3. Process.Start(path)
    4. End If


    Er hätte noch gerne eine Verschachtelung wie ich das verstehe.

    D.h.:

    Textbox1.Text = Ordner1 + Button1.Click -> Ordner1 öffnet
    -> Textbox1.Text = Unterordner1 + Button1.Click = Unterordner1 öffnet

    Er will also eine Art Funktionalität des Explorers...

    Was hast du denn damit vor? Damit ich das besser nachvollziehen kann?
    Was willst du mit erreichen?
    Es geht darum um es mal zu erklären

    Auf dem Laufwerk haben wir eine Ordner Struktur ersten 3 Ordner Vertrieb, Einkauf, Montage.

    Mich interessiert nur der Vertrieb, im Ordner Vertrieb sind wieder 5 hier interessiert mich nur der Orden Lieferant in diesem Ordner sind 300 Ordner mit unterschiedlichen Lieferanten und in Jedem Ordner befinden sich Daten zu den Lieferanten.

    Beispiel ich gebe in die Textbox "Siemens" ein dann öffnet sich der ordner "Siemens" usw.

    @RodFromGermany

    Irgendwie funktioniert dein Code nicht, es passiert gar nichts nicht mal eine Fehlermeldung