Fullname aus DirectoryInfo Liste extrahieren

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    Fullname aus DirectoryInfo Liste extrahieren

    Hi,

    ich habe ein Problem beim Verarbeiten einer List of DirectoryInfo

    Ich habe zunächst alle Directories aus einem Basisverzeichnis extrahiert und in lstDirectories eingestellt. Das klappt auch prima.

    Nun will ich aus dieser Liste den jeweils vollen Pfadnamen extrahieren. Das müsste eigentlich funktionieren, da dies m.W. Teil der Directory Info ist. Klappt aber nicht. Hier meine diversen Versuche:

    VB.NET-Quellcode

    1. 'Get all directories in base directory
    2. Dim alldirectories = New DirectoryInfo(strBaseDirectory).GetDirectories
    3. Dim directories = New List(Of DirectoryInfo)
    4. For Each found In alldirectories
    5. If (found.Attributes And (vbHidden + vbSystem)) > 0 Then Continue For
    6. directories.Add(found)
    7. Next
    8. DirectoryInfoBindingSource.DataSource = directories
    9. 'Get fullname of first directory in list
    10. lstDirectories.SelectedIndex = 0
    11. Dim strSourceDirectory As String
    12. strSourceDirectory = lstDirectories.SelectedItem.ToString 'liefert nur den Namen,nicht den vollen Pfad
    13. strSourceDirectory = lstDirectories.SelectedItem.Fullname 'Syntaxfehler
    14. Dim _Directories As DirectoryInfo
    15. strSourceDirectory = _Directories(lstDirectories.SelectedItem).Fullname 'Syntaxfehler


    Kann mir jemand auf die Sprünge helfen?

    LG
    Peter
    SelectedItem ist immer ein Objekt, es hat keine spezifischen Eigenschaften (wie Fullname). Vielleicht musst du das Objekt vorher in "DirectoryInfo" konvertieren (DirectCast), dann hast du Zugriff auf spezifische Eigenschaften.
    EDIT: @KevinHombre hat Recht, ich habe gar nicht gemerkt, dass deine "lst" keine List ist.

    Zu welchem Zeitpunkt brauchst du diese Informationen? "found" ist ja ein DirectoryInfo-Objekt, da kannst du zu dem Zeitpunkt auf "found.Fullname" zugreifen.

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

    Vielen Dank erst mal für deine Antwort.

    Mein Coding ist Teil einer einzigen Prozedur ...

    Auf "found" habe ich natürlich außerhalb der "For-Schleife" keinen Zugriff mehr.

    Aber lstDirectories wird doch via DataBinding mit "directories" befüllt ... und das ist doch vom Typ "DirectoryInfo" ...

    Irgendwie verstehe ich das nicht ...

    Übrigens die letzte Zeile sollte natürlich wie folgt lauten:

    VB.NET-Quellcode

    1. strSourceDirectory = _Directories(lstDirectories.SelectedIndex).Fullname 'Syntaxfehler


    Das Ergebnis ist aber das gleiche ... Syntaxfehler ....

    [EDIT]Habe erst jetzt die Beiträge gelesen.

    lstDirectory ist eine ListBox
    Hey.

    VB.NET-Quellcode

    1. Dim D As DirectoryInfo = directories.SingleOrDefault(Function(c) c.FullName = "pfad")


    Und da kannst Du dann auch:

    VB.NET-Quellcode

    1. Dim D = directories.SingleOrDefault(Function(c) c.FullName = "pfad").FullName


    Das sollte dir auf jedenfall helfen.

    So kannst Du dir eine spezifische DirectoryInfo mit einer bestimmten Eigenschaft rauspicken.
    @Peter329:: Sieh Dir mal das an:
    Form, Button, CheckBox, ListBox

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim ll = New List(Of IO.FileInfo)
    3. ll.AddRange(New IO.DirectoryInfo("c:\Temp").GetFiles("*.*", SearchOption.AllDirectories))
    4. Me.ListBox1.DataSource = ll
    5. End Sub
    6. Private Sub CheckBox1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox1.CheckedChanged
    7. Me.ListBox1.DisplayMember = If(Me.CheckBox1.Checked, "FullName", "Name")
    8. End Sub
    Starte, klick auf den Button und checke dann die CheckBox hin und her.
    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!
    Okay ... wenn man sich mit Leuten unterhält, dann kommen einem manchmal die richtigen Ideen.

    "lstDirectories" enthält nur den Namen und nicht den Pfadnamen, weil ich dies SELBST so im DataBinding festgelegt habe. (Ich bin dabei diese Kontrukte zum ersten Mal auszuprobieren - deshalb bitte ich um Nachsicht! *grins* )

    Ich muss natürlich auf ein Object vom Typ FileInfo zugreifen .... und das ist in meinem Fall "directories".

    Mit der Anweisung

    VB.NET-Quellcode

    1. strSourceDirectory = directories(lstDirectories.SelectedIndex).FullName


    klappt die Sache dann.

    Recht herzlichen Dank nochmal für eure Hilfe! Ich habe aus meinem Fehler jetzt doch eine ganze Menge gelernt!

    LG
    Peter

    Peter329 schrieb:

    Ich muss natürlich auf ein Object vom Typ FileInfo zugreifen

    Du meinst DirectoryInfo?

    Ansonsten, schön, dass du trotz meiner vorübergehenden Blindheit die Lösung gefunden hast. :thumbup: Genau das habe ich gemeint.

    Wobei der Ansatz von @RodFromGermany deutlich eleganter ist, wenn du "Fullname" anzeigen willst.