Ordner suchen

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von JackCimberly.

    Ordner suchen

    Hi VB-Gemeinde.

    Hab da mal wieder ein kleines Problemchen.

    C:\Ordner1\Ordner2\OrdnerXYZ\Ordner4

    Wie komme ich an Ordner4?

    OrdnerXYZ ist bei jedem Nutzer unterschiedlich.


    VB.NET-Quellcode

    1. Dim gesFolder = "Ordner4"
    2. Dim exFolder As String = ""
    3. Dim Pfad As String = "C:\Ordner1\Ordner2\"
    4. For Each exFolder In My.Computer.FileSystem.GetDirectories(Pfad, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
    5. If exFolder = gesFolder Then
    6. MessageBox.Show(exFolder)
    7. End If
    8. Next


    Bekomme da nix als Antwort und auch keine Fehlermeldung.

    Möchte mit exFolder weiterarbeiten - z.B. kopieren des Ordners.
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Versuch es mal so:

    VB.NET-Quellcode

    1. If exFolder Like "C:\Ordner1\Ordner2\*\Ordner4" Then ' * steht für mehrere, beliebige Zeichen
    2. MessageBox.Show(exFolder)
    3. End If

    Könnte man natürlich noch genauer anpassen. Kommt darauf an, wie die unbekannten Ordner heißen können.
    Hi TypeOf

    Ne, kann da keine Suchkriterien [*] einbinden, da der eine Ordner immer anders heisst (und ich nicht weiß, wie).
    Sprich, LIKE und das käme nicht in Frage.
    Leider.

    Danke trotzdem.
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Glaube, ich habs:

    VB.NET-Quellcode

    1. Dim Pfad As String = "C:\Ordner1\Ordner2\"
    2. For Each exFolder In My.Computer.FileSystem.GetDirectories(Pfad, FileIO.SearchOption.SearchAllSubDirectories, "Ordner4")
    3. MessageBox.Show(exFolder)
    4. Next


    Liefert mir zumindest das richtige Ergebnis: C:/Ordner1/Ordner2/Visual-Basic-Forum VB-Paradise.de/Ordner4/

    Edit: Kann man sich selbst bedanken? ;) Finde den Self-Thank-Button nicht :D
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Muss hier wieder anknüpfen.
    Also der o.g. Code haut hin - klappt.

    Es geht immer noch um Ordner4.
    Kursive Schrift = dieser Ordner heisst immer anders
    Dicke Schrift = dieser Ordner heisst immer Ordner4

    Nehmen wir mal an, es gibt diese Ordnerstrukturen:
    C:/Ordner1/Ordner2/Visual-Basic-Forum VB-Paradise.de/Ordner4/
    C:/Ordner1/Ordner2/Visual-Basic-Forum VB-Paradise.de 2/Ordner4/
    C:/Ordner1/Ordner2/Visual-Basic-Forum VB-Paradise.de 3/Ordner4/
    C:/Ordner1/Ordner2/Visual-Basic-Forum VB-Paradise.de 4/Ordner4/
    C:/Ordner1/Ordner2/Visual-Basic-Forum VB-Paradise.de 5/Ordner4/

    Wie bekomme ich diese in Array (automatisch, da ich nicht weiß, wieviele Ordner vorhanden sind)?
    Aus dem Büchlein, was ich habe, werde ich auch nicht schlau ^^
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    GetDirectories() gibt dir ein String-Array zurück. Damit lässt sich super arbeiten.
    EDIT:

    VB.NET-Quellcode

    1. Dim alleMeineOrdner() As String = Directory.GetDirectories(Pfad, SearchOption.AllDirectories, "Ordner4")


    Viele Grüße, Phil.

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

    Teste mal das:

    VB.NET-Quellcode

    1. Dim Pfad As String = "C:\Ordner1\Ordner2\"
    2. For Each exFolder In My.Computer.FileSystem.GetDirectories(Pfad, FileIO.SearchOption.SearchAllSubDirectories)
    3. If My.Computer.FileSystem.GetDirectoryInfo(exFolder).FullName.Contains("\Ordner4") Then
    4. MsgBox("Gefunden:" & My.Computer.FileSystem.GetDirectoryInfo(exFolder).FullName)
    5. Exit For
    6. End If
    7. Next

    UFO
    hm ....

    @UFO
    Liefert mir immer ein Ordner zurück (als nicht alle).

    @YaPh1l
    Kommt leider ein Fehler "Der Enumerationswert lag außerhalb des gültigen Bereichs.
    Parametername: searchOption
    ".

    Aber ich habe ja;

    VB.NET-Quellcode

    1. For Each exFolder In My.Computer.FileSystem.GetDirectories(Pfad, FileIO.SearchOption.SearchAllSubDirectories, "Ordner4")
    2. MessageBox.Show(exFolder)
    3. Next


    Hier bekomme ich so viele MsgBoxen angezeigt, die gefunden werden. Also richtig!
    Kann man diesen Code nicht erweitern? ... Damit ich exFolder weiterarbeiten kann ...

    Geplant ist, wenn ein Ordner Ordner4 gefunden wird oder auch mehrere, dass eine Abfrage kommt (CheckBox), welcher dieser Ordner gesichert werden soll. Sprich; findet man 4 Ordner, dann Abfrage mit kompletten Pfad -> gewünschte Ordner anklicken -> speichern.
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Irgendwie stell ich mich zu blöd an oder ich raff das einfach nicht.

    Kommt Fehler:

    Der Wert vom Typ "System.Collections.ObjectModel.ReadOnlyCollection(Of String)" kann nicht in "1-dimensionales Array von String" konvertiert werden.
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Der Rückgabetyp ist auch ReadOnlyCollection(Of String) und kein String Array. Das sollte funktionieren:

    VB.NET-Quellcode

    1. Dim arr As Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Computer.FileSystem.GetDirectories("C:\Ordner1\Ordner2\", FileIO.SearchOption.SearchAllSubDirectories, "Ordner4")
    @ll

    Das mit ....

    VB.NET-Quellcode

    1. Dim arr() As String = My.Computer.FileSystem.GetDirectories(Pfad, FileIO.SearchOption.SearchAllSubDirectories, "Ordner4")

    ... kapiere ich nicht.
    Keine Ahnung, wie ich arr() aufrufe ...

    Ich habe das jetzt so gemacht bzw. verbleibe wie ich es bisher gemacht habe:

    VB.NET-Quellcode

    1. For Each exFolder In My.Computer.FileSystem.GetDirectories(Pfad, FileIO.SearchOption.SearchAllSubDirectories, "10190")
    2. ' MessageBox.Show(exFolder)
    3. form_exFolder.CheckedListBox1.Items.Add(exFolder, True)
    4. form_exFolder.Show()
    5. Next


    Was für mich noch interessant wäre, wieviele Ordner gefunden wurden.

    VB.NET-Quellcode

    1. exFolder.Length

    Bekomme ich nicht die Anzahl raus, wie so oft die MsgBox aufgetaucht ist. Komisch.
    Idee?
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Du fügst du einzelnen Ordner doch in der CheckedListBox hinzu. Dann kannst du die Itemanzahl der CheckedListBox verwenden. (CheckedListBox1.Items.Count)
    Wenn du mit der Variable arr arbeitest, kannst du Anzahl über arr.Count herausfinden.
    @TypeOf

    Ja, hatte ich auch schon.
    CheckedListBox1.Items = 3 Einträge (checked).
    Label1 = [Ausgabe] 1

    Code:

    VB.NET-Quellcode

    1. Dim found_exfolder As Integer
    2. found_exfolder = CheckedListBox1.Items.Count
    3. Label1.Text = found_exfolder


    Auch so eine Sache ?( ?(
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren