Dateipfad mehrer ausgewählter Dateien aufrufen.

  • VB.NET

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

    Dateipfad mehrer ausgewählter Dateien aufrufen.

    Hey,

    ich habe ein Problem. Mit einem Button öffnet sich ein ODF. Nun möchte ich jeden einzelnen Dateipfad der markiereten Einträge in
    eine ListBox hinzufügen.

    VB.NET-Quellcode

    1. Dim Dateinamen As String
    2. For Each Dateinamen As String In .FileNames
    3. Dateinamen = OpenFileDialog1.FileNames
    4. Next
    5. ListBox1.Items.Add(Dateinamen)


    Doch warum funktioniert das nicht? ?(

    Danke im Vorraus!

    P.S. Bin noch nicht so erfahren :thumbsup:

    VB.NET-Quellcode

    1. For Each Dateinamen As String In .FileNames
    2. ListBox1.Items.Add(Dateinamen)
    3. Next
    „Was ich gerade mache? Ich reite Hand in Hand mit dem Matthäus-Effekt auf einer Exponentialfunktion.“ ^^

    Jannis22 schrieb:


    VB.NET-Quellcode

    1. Dim Dateinamen As String
    2. For Each Dateinamen As String In .FileNames
    3. Dateinamen = OpenFileDialog1.FileNames
    4. Next
    5. ListBox1.Items.Add(Dateinamen)



    Das funktioniert aus mehreren Gründen nicht.
    Bei der For Each Schleife steht "For Each Dateinamen as String".
    Damit hast du schonmal eine Variable deklariert und das "Dim Dateinamen as String" ist dadurch nicht notwendig.

    Und die Schleife geht nun die Liste durch und du bekommst automatisch bei jedem Durchgang über die Variable "Dateinamen" den nächsten Pfad.
    Also ist die Zeile "Dateinamen = OpenFileDialog1.Filenames" auch nicht notwendig. Außerdem kann die Zeile nicht funktionieren, da Dateinamen ein String ist und .Filenames ein String Array (Eine Liste von Strings).

    Und die Zeile "ListBox1.Items.Add..." sollte innerhalb der Schleife stehen, weil du ja innerhalb der Schleife jeden einzelnen Pfad aus der Liste ausliest und dann eben an die Listbox übergibst.

    So wie Mikro Fahrrad es geschrieben hat, sollte es dann aussehen.
    @Jannis22
    oder gleich richtig:

    VB.NET-Quellcode

    1. ListBox1.Items.AddRange(OpenFileDialog1.FileNames)
    Hast Du

    VB.NET-Quellcode

    1. OpenFileDialog1.Multiselect = True
    :?:
    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!
    Stimmt. Währe so natürlich am einfachsten.
    Ich nehme aber trotzdem gerne eine For Each Schleife da ich noch eine Überprüfung auf die Dateiendungen einbauen kann, ob der Benutzer denn auch wirklich nur Dateien ausgewählt
    hat die ich im Filter angegeben habe.
    Okay, funktiniert. Jetzt aber möchte ich das ganze als drittes ListView-SubItem aufnehmen.
    Vorab : Ich hatte schonmal eine ähnliche Frage (siehe VB1963)
    Zum Code: Das ganze ist eine Musikdatenbank in Form von einer ListView. oInfo sind die Mp3 Infos Titel, Interpret und Album.
    Das dritte SubItem soll der Dateipfad der Mp3-Datei sein, die durch einen ODF hochgeladen wird.
    Funktioniert auch alles wunderbar. Wähle ich aber mehrere Dateien aus (Multiselect), dann wird bei jeder Spalte der
    Dateipfad der ersten ausgewählten Datei vom ODF eingetragen.
    Habe ich zum Beispiel 3 Lieder mit folgenden Infos im ODF der wie im folgenden, der Reihe nach ausgewählt:

    Titel: 1.Lied Interpret: 1.Interpret Album: 1.Album Dateipfad : C://SongX
    Titel: 2.Lied Interpret: 2.Interpret Album: 2.Album Dateipfad : C://SongY
    Titel: 3.Lied Interpret: 3.Interpret Album: 3.Album Dateipfad: C://SongZ

    , so trägt er zwar in alle Spalten die richtigen Infos ein, jedoch bei allen den Dateipfad "C://SongX", also das erste.
    Was stimmt dann am Code nicht?

    VB.NET-Quellcode

    1. Private Sub ShowMP3Infos(ByVal sFile As String)
    2. Dim oInfo As MP3Info = ReadMP3Info(sFile)
    3. With ListView1.Items.Add(oInfo.Titel)
    4. .SubItems.Add(oInfo.Interpret)
    5. .SubItems.Add(oInfo.Album)
    6. For Each Item As String In OpenFileDialog1.FileNames
    7. .SubItems.Add(Item)
    8. Next
    9. End With
    10. End Sub


    Hoffe, ihr habts verstanden :)

    LG

    Jannis22 schrieb:

    als drittes ListView-SubItem
    Vielleicht steigst Du zunächst um auf DataGridView.
    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!

    VB.NET-Quellcode

    1. Private Sub ShowMP3Infos(ByVal sFile As String)
    2. Dim oInfo As MP3Info = ReadMP3Info(sFile)
    3. With ListView1.Items.Add(oInfo.Titel)
    4. .SubItems.Add(oInfo.Interpret)
    5. .SubItems.Add(oInfo.Album)
    6. For Each Item As String In OpenFileDialog1.FileNames
    7. .SubItems.Add(Item)
    8. Next
    9. End With
    10. End Sub


    Diese Sub soll immer nur die übergebene Datei eintragen.
    Mit der "For Each Item as String in ..." Schleife gehst du aber nochmal die Pfade alle durch.
    Das ist unnötig. Und außerdem solltest du auf OpenFileDialog hier nicht mehr zugreifen. Das machst du ja vorher schon.

    Mit "ByVal sFile as string" erhältst du ja den Pfad zur Datei schon in dieser Sub.
    So müßte es dann aussehen. Wobei ich nichts getestet habe und mit ListViews normal nicht arbeite.
    Und ich gehe mal von deinen anderen eröffneten Threads aus, dass du vorher die Dateipfade von OpenFileDialog1 erhältst und die einzelnen Pfade an diese Sub übergibst.

    VB.NET-Quellcode

    1. Private Sub ShowMP3Infos(ByVal sFile As String)
    2. Dim oInfo As MP3Info = ReadMP3Info(sFile)
    3. With ListView1.Items.Add(oInfo.Titel)
    4. .SubItems.Add(oInfo.Interpret)
    5. .SubItems.Add(oInfo.Album)
    6. .SubItems.Add(sFile)
    7. End With
    8. End Sub