Pfade aus Listbox in Dateinamen umändern

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Pfade aus Listbox in Dateinamen umändern

    Hey Leute :)

    Bin kein guter Programmierer und mach das nur so hobbymäßig weils mir Spaß macht.
    Ich habe eine Listbox1, in die Dateipfade eingelesen und gelistet werden. Ich möchte aber gerne noch eine zweite Listbox2, in der dann nur die Namen der Dateien (in meinem Fall Musikdateien) stehen.
    Wie kann ich das möglichst einfach bewerkstelligen? Das soll im gleichen Augenblick passieren, in dem die Pfade eingelesen werden.

    Visual Basic-Quellcode

    1. System.IO.Path.GetFileNameWithoutExtension(ListBox1.Items())


    ... Das weiß ich bereits - aber wie geht das jetzt mir arrays? ?(

    lg :saint:
    Wenn du schon alle die Dateipfade ausliest, dann kannst du bei jedem pfad:

    VB.NET-Quellcode

    1. ListBox1.Item.Add(pfad)
    2. Listbox2.Item.Add(System.IO.Path.GetFileNameWithoutExtension(Pfad))


    Wenn du Pfad und DateiName zusammen haben willst, hast du viele Möglichkeiten, wie z.B:
    - Array mit Tupeln ((pfad,dateiname),(pfad2,dateiName2)....(pfadi,dateiNamei)
    - List of Arrays
    oder wenn die Listen statisch sein sollen und pfad und Dateiname die selbe Position bei beiden ListBoxes haben, dann einfach nimmst ListBox1.item(1) und ListBox2.Item(1).

    Das hat aber m.M.n nicht viel Sinn, da wenn du den Pfad hast, kannst du damit auch den Namen der Datei erzeugen ohne den iwo speichern zu müssen, kommt halt darauf an, was du damit später machst.

    Was du vorhattest denke ich war etwa so:

    VB.NET-Quellcode

    1. ​For each item in Listbox1
    2. ListBox2.Item.Add(System.IO.Path.GetFileNameWithoutExtension(item))
    3. Next
    Life doesn't give you a datasheet. Sometimes the docs are wrong and you have to try it.

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

    rgomez schrieb:

    Wenn du Pfad und DateiName zusammen haben willst, hast du viele Möglichkeiten, wie z.B:
    - Array mit Tupeln ((pfad,dateiname),(pfad2,dateiName2)....(pfadi,dateiNamei)
    - List of Arrays


    Neeeeee dafür gibt es doch extra die FileInfo Klasse. Alles andere ist hier gewurschtel ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Erstelle beim Einlesen der Dateien eine List(Of IO.FileInfo), in der Du die Dateien speicherst.
    Diese Liste gibst Du dann als DataSource an die ListBoxen und kannst mit DisplayMember angeben, welche Eigenschaft von FileInfo in der ListBox angezeigt werden soll (z.B. FullName für den gesamten Pfad)

    VB.NET-Quellcode

    1. Dim files As New List(Of IO.FileInfo)(New IO.DirectoryInfo("Ordnerpfad").GetFiles())
    2. ListBox1.DataSource = files
    3. ListBox1.DisplayMember = "FullName"
    Danke für die vielen Antworten!
    Im Endeffekt hat die Version von rgomez direkt geklappt :)

    Jetzt hab ich aber noch ein anderes Problem: Ich will, dass in Listbox1 und Listbox2 immer das gleiche angewählt ist...
    Ich versteh nicht warum es so nicht funktioniert:

    VB.NET-Quellcode

    1. ​ListBox2.SetSelected(ListBox1.SelectedIndex)

    oder

    VB.NET-Quellcode

    1. ​ListBox2.SelectedIndex = ListBox1.SelectedIndex

    oder irgendwie in der Art...

    Weiß da jemand mehr?

    Jonny98731 schrieb:

    Ich will, dass in Listbox1 und Listbox2 immer das gleiche angewählt ist...


    Geht. Beide Controls müssen die selbe Datenquelle haben. Steht zufällig in der Lösung, die auch ich bevorzugen würde, von @K.K.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    zu meiner Lösung: Ich ging davon aus, dass er von FileInfo nichts weisst, also die "einfache" Methode her, obwohtl evtl. nicht die beste. Ich denke ist besser "klein" anfangen, und dann wenn man FileInfo nutzt, wissen warum es besser bzw. selber an den Grenzen kommen und nicht es einfach tun, weil die Jungs die Ahnung haben es sagen.

    Außerdem, denke ich dass alte Fuchse immer bessere Tips (als ich) geben können, was aber nicht immer direkt einfacher zu verstehen ist. Evtl. dieser Umweg durch die "nicht bessere Alternative" erleuchtet dann, warum die andere, die bessere Option ist und dann hat man es begriffen. Andersrum, ist es iwie: "Ich weiss es ist besser so, nur nicht warum". Nicht alle Leute legen sich gleich ins Zeug (obwohl sie sollten), und gehen die Sachen nicht so nach, wie anderen, so dass solche Umwege am Ende verursachen, dass man merkt warum ihr sagt was ihr sagt. Deswegen wird mit großer Wahrscheinlichkeit eher für die 2 Problematik, eher etwas "quick & dirty" und nicht Databinding gewählt. Das ist aber auch ein Lernpfad, der wieder auch evtl. nicht der beste ist, aber da sagte schon unser Freund Albert, dass alles relativ ist, kommt halt auf den Zuschauer an.

    Ich habe selber vor 2 Jahren mit Programmierung angefangen, und iwie ist man vertrauter und man nimmt die einfache Alternative, insofern für Neulinge-Augen, es tuts was es soll:P

    Sorry für mein Deutsch und danke, dass ihr da seid und euer Wissen kostenlos heutzutage weitergibt :)
    Life doesn't give you a datasheet. Sometimes the docs are wrong and you have to try it.
    Seh ich anners, und bin mir ziemlich sicher, dass Albert das mit dem "relativ" nicht in diesem Sinne gesagt hat.
    Klar gibt es viele Wege nach Rom, aber man kann definitiv bestimmen, welche davon günstiger sind. Und ist gradezu gemein, einem , der nach dem Weg fragt, einen ungünstigen zu weisen.
    Du sagst ja auch nicht einem, der im Wedding nach dem Weg zum Bahnhof Zoo fragt "Da musst du langlaufen".
    Sondern du sagst: "Nimm die U9 Richtung Steglitz".
    Der Vergleich ist gut, weil indem du ihm den ungünstigen Weg ansagst, erschwerst du ihm die Möglichkeit, effizient voranzukommen.
    Beim Programmieren isses ausserdem so, dass jede Vorgehensweise, die einmal leidlich funktionierte, tendenziell das nächstemal ebenso angewandt wird.
    Also inne Programmierung gilt: "Gib einem Mann einen faulen Fisch, und er wird faule Fische fangen sein Lebtag".

    rgomez schrieb:

    Ich ging davon aus, dass er von FileInfo nichts weisst, also die "einfache" Methode her, obwohtl evtl. nicht die beste. Ich denke ist besser "klein" anfangen


    FileInfo ist der einfachere und flexiblere Weg. Alles andere was hier so als "Lösung" vorgeschlagen wurde war nur wurschtelei.

    Davon mal abgesehen, der Vorschlag über ein Tuple Array oder eine List Of Array war jetzt auch nicht der einfachste weg, oder? ;)

    Ich seh das Thema im übrigen so wie der nette Herr über mir :)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen