Directory Name + String anketten

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von FreakJNS.

    Directory Name + String anketten

    Hallo,

    Also, meine Frage ist jetzt nochmal folgende:
    Ich hatte es letztens schonmal wie man die Dateien/Ordner auflistet, und habe diese Methode übernommen:

    VB.NET-Quellcode

    1. ListBox1.Items.AddRange(New IO.DirectoryInfo(TextBox1.Text).GetDirectories("*.*", IO.SearchOption.TopDirectoryOnly))
    2. ListBox1.Items.AddRange(New IO.DirectoryInfo(TextBox1.Text).GetFiles("*.*", IO.SearchOption.TopDirectoryOnly))


    Klappt alles wunderbar. Meine Frage, wo soll ich hier für jeden Ordner nen String anhängen?
    Also das mit in der ListBox für jeden Ordner das so angezeigt wird:

    Quellcode

    1. "Mein String" + Ordnername
    2. "MeinString2" + Ordnername etc


    Das gleiche auch für jede Datei:

    Quellcode

    1. "Mein String" + Dateiname
    2. "MeinString2" + Dateiname etc


    Also das ich jedem Ordner/Datei nochmal einen String hinzufügen kann und er dann in meiner ListBox auftaucht?
    C# Developer
    Learning C++
    Der Code kommt mir bekannt vor. :thumbsup:
    Momentan werden in Deinen ListBoxen DirectoryInfo- und FileInfo-Objekte angezeigt.
    Wullst Du nun Strings oder immer noch DirectoryInfo- und FileInfo-Objekte anzeigen?
    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!
    Immer noch die Dateinamen/Ordnernamen.
    Allerdings sagen wir das sind unsere Dateien:



    Dann sollen mir die Dateien/Ordner angezeigt werden, aber verändert:

    "OrdnerBlubb" + Ordnername
    "FileBlubb" + Filename
    "FileBlubb" +Filename
    "FileBlubb" +Filename
    C# Developer
    Learning C++
    Da musst Du das Item ändern:

    VB.NET-Quellcode

    1. Dim di = New IO.DirectoryInfo("c:\Temp")
    2. Dim di2 = New IO.DirectoryInfo(di.FullName & "\Test")
    3. Dim fi = New IO.FileInfo(di.FullName & "\xxx.jpg")
    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, danke schonmal, aber wenn ich die so adde, werden mir wieder nur die normalen Ordner angezeigt, der geaddedete String nicht ?( ?

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Dim di = New IO.DirectoryInfo("C:\Users\Domi\Desktop")
    3. Dim di2 = New IO.DirectoryInfo(di.FullName & "\Test")
    4. Dim fi = New IO.FileInfo(di.FullName & "\xxx.jpg")
    5. ListBox1.Items.AddRange(New IO.DirectoryInfo(di.ToString).GetDirectories("*.*", IO.SearchOption.TopDirectoryOnly))
    6. End Sub
    C# Developer
    Learning C++

    Rikudo schrieb:

    VB.NET-Quellcode

    1. New IO.DirectoryInfo(di.ToString)
    Was soll das :?: di ist bereits eine DirectoryInfo.
    Ich denke mal, das Verzeichnis hat keine Unterverzeichnisse.
    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!
    Was soll das überhaupt bringen?

    Du willst das die DirectoryInfo "Verzeichnis01" in der Listbox als "Verzeichnis01_blaa" gelistet wird? (Für FileInfos gleiches). Das bedeutet, dass du mehr Informationen speichern willst als dir die Klasse standardmäßig bieten kann. Um das Anzeigen zu lösen sehe ich nur zwei Möglichkeiten:

    Möglichkeit 1:
    Mit Strings arbeiten, also die Directory/FileInfo vergessen. Nachteile sind natürlich, dass du das Info-Objekt dabei verlierst und beides regelrecht zu einem primitiven String vermischst.

    Möglichkeit 2:
    Eine Klasse schreiben die die beiden um einen "ErweiterungsString" erweitert. Da FileSystemInfo die Oberklasse von FileInfo und DirectoryInfo ist könntest du in deiner 'ExtendedInfo' davon erben, im Konstruktor eine FileInfo/DirectoryInfo (=>FSI als Typ) sowie den String übergeben bekommen. Die ToString-Methode (denn diese wird von der Listbox aufgerufen!) entsprechend überschreiben und fertig. Vorteil ist ganz klar, dass du die Anzeige verändert hast aber trotzdem noch Zugriff auf die Ursprüngliche File/DirectoryInfo hast.
    Nachteil ist hier natürlich, dass du zusätzlichen Code brauchst um eine Auflistung dieser ExtendedInfos zu bekommen. Per Extension könntest du die Directory und File-Klasse um die Methode IO.Directory.GetExtendedDirectories/Files(pfad,extensionString) ergänzen.


    Vllt gehts aber auch noch einfacher, dazu müsste man wissen wozu das dienen soll^^
    Wirklich nicht? ?(
    Ist es unmöglich den String anzuhängen?
    Ich will ja bloss für jeden ordner einen bestimmten String anhängen und für jede Datei einen anderen String.
    Die Dateien sollen mit der oben genannten Methode gelistet werden...
    C# Developer
    Learning C++
    Hab mir grade noch eine 4. Möglichkeit ausgedacht:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. Dim zahlen As New List(Of Integer) From {1, 4, 6, 8, 4, 2}
    4. ListBox1.DataSource = ItemExtender(Of Integer).Verpacke(zahlen, "ist eine Zahl")
    5. End Sub
    6. End Class
    7. Public Class ItemExtender(Of T)
    8. Public Property Objekt As T
    9. Public Property ErweiterungsString As String
    10. Public Sub New(ByVal obj As T, ByVal erweiterungsString As String)
    11. Me.Objekt = obj
    12. Me.ErweiterungsString = erweiterungsString
    13. End Sub
    14. Public Overrides Function ToString() As String
    15. Return Objekt.ToString & " " & ErweiterungsString
    16. End Function
    17. Public Shared Function Verpacke(ByVal input As IEnumerable(Of T), ByVal erweiterungsString As String) As List(Of ItemExtender(Of T))
    18. Dim extended As New List(Of ItemExtender(Of T))
    19. For Each obj In input
    20. Dim tmp As New ItemExtender(Of T)(obj, erweiterungsString)
    21. extended.Add(tmp)
    22. Next
    23. Return extended
    24. End Function
    25. End Class


    Damit ist sowas für beliebige Typen möglich
    Das geht mit Zahlen.
    Aber ich möchte diese Doch an meine gelisteten Ordern/Dateien anhängen, also an diese methode:

    VB.NET-Quellcode

    1. New IO.DirectoryInfo(di.ToString).GetDirectories("*.*", IO.SearchOption.TopDirectoryOnly))
    C# Developer
    Learning C++
    Ich habs so probiert:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim zahlen As New List(Of Integer) From {1, 4, 6, 8, 4, 2}
    3. ListBox1.DataSource = ItemExtender(Of Integer).Verpacke(New IO.DirectoryInfo("C:\Windows").GetDirectories("*.*", IO.SearchOption.TopDirectoryOnly).ToString, "ist eine Zahl")
    4. End Sub


    Und krieg diese Exception:

    C# Developer
    Learning C++
    ItemExtender(Of DirectoryInfo) kennt er aber iwie nicht.
    Er meldet das wäre nicht definiert?

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim zahlen As New List(Of Integer) From {1, 4, 6, 8, 4, 2}
    3. ListBox1.DataSource = ItemExtender(Of directoryinfo).Verpacke(New IO.DirectoryInfo("C:\Windows").GetDirectories("*.*", IO.SearchOption.TopDirectoryOnly), "ist eine Zahl")
    4. End Sub


    Habs.
    Hab vergessen System.io zzu importieren.
    C# Developer
    Learning C++
    Hallo,

    Du musst einfach aus der List(Of ItemExtender (Of DirectoryInfo)) eine List(Of String) machen.

    Hier ein Einzeiler

    VB.NET-Quellcode

    1. deinelist.ForEach(Sub(ByVal value As ItemExtender(Of DirectoryInfo)) liststring.Add(value.ToString))


    Weiß jetzt nicht, ob es so ganz richtig, weil ich kein VB gerade da hab,
    aber sollte funktionieren.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D

    Rikudo schrieb:

    Kann ich meine manipulierten Ordnernamen + strings auch ohne die ListBox direkt in eine Textdatei schreiben?

    nimm die dateinamen, und öffne nen StreamWriter
    --> MSDN
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais