alle textdateien eines ordners laden

  • VB.NET

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

    alle textdateien eines ordners laden

    hi

    ich habe den inhalt von verschiedenen text und comboboxen in textdateien abgespeichert (pro zeile ein element).

    nun möchte ich dass er alle textdateien mit der dateiendung .abc in einem angegebenen ordnerpfad ausliest und ihren text zeilenweise ab zeile 2 in eine listview einträgt.

    Die listview zu füllen ist kein problem aber wie kriege ich ihn dazu den text aller .abc-dateien in einem ordner zeilenweise einzutragen (pro datei 1 zeile in der listview tabelle)?

    das könnte eventuell eine for-each schleife sein aber wie sieht die aus?

    danke!

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Loquax“ ()

    Hallo,

    nimm ne rekursive Suche mit den Pattern *.txt und lassen die Pfade eintragen.

    Ich glaube, der Beitrag war RecursivFileSearch von ErfinderDesRades.

    @ErfinderDesRades:

    Kannst du den Link zu deinem Beitrag reinschreiben, weil ich find den auch mit der Forensuche nicht mehr :(

    MFG

    Alex-Digital :D
    So:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. For Each fi In New System.IO.DirectoryInfo("c:\Temp").GetFiles("*.txt", IO.SearchOption.AllDirectories)
    3. ListView1.Items.Add(fi.ToString)
    4. Next
    5. End Sub
    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!

    Loquax schrieb:

    nun möchte ich dass er alle textdateien mit der dateiendung .abc in einem angegebenen ordnerpfad in eine listview einträgt.

    Die listview zu füllen ist kein problem aber wie kriege ich ihn dazu alle .abc-dateien in einem ordner einzutragen (pro datei 1 zeile in der listview tabelle)?


    Du hast ja auch genau nach dem gefragt oder nicht?

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Ein bisschen Eigeninitiative brauchst du schon: Oben hat RodFromGermany gepostet, wie du an den Pfad von jeder Datei in einem Ordner rankommst, mit ein bisschen Suchen findest du raus, wie man den Inhalt einer Datei, deren Pfad man hat, bekommt: msdn.microsoft.com/de-de/library/ms143368(v=vs.80).aspx
    tut mir leid. da habe ich oben wohl die falsche formulierung gewählt^^

    hier meine ansätze, um alle textfiles eines ordners auszulesen und ihren text ab zeile 2 in die listview einzutragen:

    liest bestimmte zeilen aus textdatei aus:

    VB.NET-Quellcode

    1. Dim Zeilen As String() = IO.File.ReadAllLines(OpenFileDialog1.FileName)


    erfasst alle dateipfade von allen textdateien im StartupPath:

    VB.NET-Quellcode

    1. For Each fi In New System.IO.DirectoryInfo(Application.StartupPath).GetFiles("*.txt", IO.SearchOption.AllDirectories)
    2. Next


    doch wie füge ich das alles zusammen?

    danke!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Loquax“ ()

    Da setzt du einfach ein, was Rod oben geschrieben hat. ToString gibt den Pfad zurück, also musst du

    VB.NET-Quellcode

    1. ListView1.Items.Add(IO.File.ReadAllText(fi.ToString))
    verwenden.

    P.S. Rot ist den Mods vorbehalten!
    @ farbe
    oh tut mir leid, das wusste ich nicht^^

    @ code
    ja da liegt das problem.

    VB.NET-Quellcode

    1. ListView1.Items.Add(IO.File.ReadAllText(fi.ToString))


    funktioniert soweit, aber er packt den gesamten text in die erste spalte.

    mein textdokument sieht aber so aus:

    text für spalte 1
    text für spalte 2
    usw.

    VB.NET-Quellcode

    1. ListView1.Items.Add(IO.File.ReadAllLines(fi.ToString))


    geht aber nicht:

    Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "Add" mit diesen Argumenten aufgerufen werden kann:
    "Public Overridable Function Add(value As System.Windows.Forms.ListViewItem) As System.Windows.Forms.ListViewItem": Der Wert vom Typ "1-dimensionales Array von String" kann nicht in "System.Windows.Forms.ListViewItem" konvertiert werden.
    "Public Overridable Function Add(text As String) As System.Windows.Forms.ListViewItem": Der Wert vom Typ "1-dimensionales Array von String" kann nicht in "String" konvertiert werden.

    Loquax schrieb:

    Der Wert vom Typ "1-dimensionales Array von String" kann nicht in "String" konvertiert werden.
    Das ist der feine Unterschied zwischen

    Loquax schrieb:

    VB.NET-Quellcode

    1. ListView1.Items.Add(IO.File.ReadAllLines(fi.ToString))
    und

    Loquax schrieb:

    VB.NET-Quellcode

    1. ListView1.Items.Add(IO.File.ReadAllText(fi.ToString))
    Klick mal drauf und drück F1 für Hilfe.
    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!

    Loquax schrieb:

    funktioniert soweit, aber er packt den gesamten text in die erste spalte.

    mein textdokument sieht aber so aus:

    text für spalte 1
    text für spalte 2
    usw.
    Ich dachte, jedes Dokument sollte in einer Zeile in der Listview landen? Wenn nicht, musst du den Rückgabewert von ReadAllLines (ist ein Array, d.h. es enthält mehrere Strings (für jede Zeile einen)) nochmal in ner For-Each-Schleife durchgehen und dementsprechend zur Listbox adden:

    VB.NET-Quellcode

    1. for each fi in new system.io.directoryinfo(application.startuppath).getfiles("*.txt", io.searchoption.alldirectories)
    2. for each line as string in system.io.file.readalllines(fi.tostring)
    3. listview1.items.add(line)
    4. next
    5. next
    (nur aus dem Kopf)

    Loquax schrieb:

    brauche ich nun noch eine for each schleife für das array, das ich nicht in einen string umwandeln kann
    Da du jeden Strings des Arrays einzeln verarbeiten musst, benötigst du die wohl, ja. Hast du meinen Post überhaupt gelesen?
    Ich dachte, dass du das wolltest. Bitte beschreibe jetzt mal, was eigentlich dein Ziel ist - bisher hast du immer nur geschrieben, wenn es eine Antwort gab und du das nicht wolltest. Ich kann halt nicht Hellsehen.
    tut mir leid für die dürftige beschreibung.

    ich habe verschiedene textboxen deren inhalt ich in eine textdatei speichere. pro zeile 1 textbox:

    textbox1.text
    textbox2.text
    textbox3.text
    usw.

    jetzt möchte ich die textfiles ab zeile 2 auslesen und es in die listview tabelle so eintragen:

    ________spalte 1______________spalte2_______
    .........textbox1.text............textbox2.text

    usw.

    Und jeder textfile bekommt in der listview eine eigene zeile

    VB.NET-Quellcode

    1. for each fi in new system.io.directoryinfo(application.startuppath).getfiles("*.txt", io.searchoption.alldirectories)
    2. dim lines as string() = system.io.file.readalllines(fi.tostring)
    3. dim item as new listviewitem(lines(0))
    4. for i = 1 to lines.length
    5. item.subitems.add(lines(i))
    6. next
    7. listview.items.add(item)
    8. next
    So was? Kp obs funktioniert, habs nicht ausprobiert.
    Zeigt er mir leider nur beim starten von debugging an, konkrete errors gibt er nicht, auch keine zeile. Das programm läuft ganz normal.

    Ich vermute es ist diese Zeile:

    VB.NET-Quellcode

    1. item.SubItems.Add(Zeile(i))


    Wenn ich das (i) weglasse, dann kommt kein error und er lädt alles in die listview, leider in einer komplett wirren reihenfolge und anordnung

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Loquax“ ()