VisualBasic Befehl für alle Dateien in einem Ordner ausführen

Gilrich

Cadet 4th Year
Registriert
Nov. 2009
Beiträge
96
Hallo
Ich hab einen Ordner mit Text-Dateien (.txt). Wenn mein Programm starte, liest es den Inhalt der ersten Text-Datei aus und speichert ihn in einer Textbox. Das klappt wunderbar. Aber jetzt möchte ich per klick auf einen Button das Selbe für die nächste Datei machen. Also wenn ich auf den Button drücke soll der Inhalt der zweiten Datei in die Textbox geschrieben werden. Beim nächsten Klick dann der Text der dritten Datei usw. bis alle Dateien durch sind.
Ich habs mit einer For each Schleife versucht. Das funktioniert aber leider nicht.

Wenn mir jemand helfen kann, wär ich echt froh :)
Danke im Voraus
Gruss Gil
 
eine schleife durchläuft die Dateien ja ohne Button-Klick

Du musst dir die Datei merken, die du gerade anzeigst, beispielsweise anhand eines Index. Jetzt inkrementierst du bei jedem Klick diese Variable um einen und führst die Methode zum Laden der Datei mit diesem Index erneut aus.

Die Methode zum Laden muss du natürlich dann so konstruieren, dass sie innerhalb eines Ordners die Datei lädt, deren Nummer übergeben wurde. Also zum beispiel:

public sub load(byval index as integer)

und diese Datei schreib den inhalt der datei an der Stelle index in die Textbox
 
wie holst du dir denn die eine Textdatei rein?

So wie du die eine Textdatei einlädst, musst du auch die anderen erst "reinladen" / öffnen, um mit ihnen dann was anzustellen in deinem Programm.
Üblicherweise gibts dafür den Directory-Dialog, wo du ein Verzeichnis auswählst und dann öffnet er jede Datei mit einer bestimmten Endung (Filter dann in deinem Beispiel auf ".txt").
Diese ganzen Dateien würde ich aber nicht gleichzeitig offen lassen.

Mein Vorschlag:
Erstell ein Objekt mit einem String und einem Index / vielleicht noch nen zweiten String mit dem Dateinamen.

Ein Button, wo du das Verzeichnis auswählst und die Dateien einließt:
-erstellt eine Liste von Objekten (pro Datei eins) und ließt nacheinander zu jedem Objekt (stream-operation) den Inhalt in einen String und setzt den Index / Dateinamen

Ein zweiter Button, wo du dann durch wiederholtes klicken drauf der Textbox den Inhalt von Objekt x zuweißt, wobei jedesmal der Index inkrementiert wird...

Wenn du den Verzeichnis-Dialog brauchst, meld dich nochmal...

Ach ja:
VB.NET ?
 
Ich habs jetzt nochmal mit euren Tipps versucht. Aber ich komme immer noch nicht weiter.
Wie kann ich die Pfade jeder einzelnen Datei in eine Liste speichern und ihnen dann Werte zuordnen, mit denen ich sie dann aufrufen kann?
Ich bin ein Einsteiger ins Programmieren und bin wirklich froh um eure Hilfe

Und ja es ist VB.Net
 
für die Liste der Dateien verwendest du folgende Funktion:

System.IO.Directory.GetFiles(Byval path as String) as String()

wenn du den Pfad des Verzeichnisses übergibst, erhälst du eine Liste der Dateinamen zurück, also zum Beispiel:


Dim dateien() as String = System.IO.Directory.GetFiles("C:\Windows")

Mit diesem Beispiel erhälst du alle Dateien des Windows-Verzeichnis auf C:\
 
Hallo,

du benötigst ein Formular mit:

  • 3 Buttons (Pfad raus suchen, Vorwärts und Rückwärts navigieren)
  • 1 TextBox (zum anzeigen des Inhalts der *.txt)
  • 1 FolderBrowserDialog (findest du in der ToolBox -> Einfach aufs Formular ziehen)

Ich hoffe ich habe den Quelltext genug mit Kommentaren versehen, wenn nicht stell bitte deine Fragen... ich bin schon leider etwas fertig... :(

So nun nur noch die Events bei dir anlegen etc. und dann bediene dich an dem Quellcode hier ;)

Code:
Imports System.IO


Public Class fTextFileNavigator

    Private sourceFiles As New Dictionary(Of Integer, String)
    Private nextIndexIs As Integer
    Private firstRun As Boolean = True




    Private Sub btnGetPath_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetPath.Click


        If Me.FolderBrowserDialog.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
            Dim files As New List(Of String)

            '== hier werden alle dateien aus dem ausgewählten Ordner ermittelt
            '== hier kannst du auch statt 'Me.FolderBrowserDialog.SelectedPath' einen festen Pfad wie 'C:\Windows' angeben
            files.AddRange(Directory.GetFiles(Me.FolderBrowserDialog.SelectedPath))

            '== alle Dateien in ein Dictionary schreiben (Index und Dateipfad) // lies bitte bei der MSDN nach was ein Dictionary genau ist!
            For i = 0 To files.Count - 1
                If New FileInfo(files(i)).Extension = ".txt" Then
                    Me.sourceFiles.Add(i, files(i))
                End If
            Next
        End If

    End Sub

    Private Sub btnNextFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNextFile.Click

        '== wenn vorwärts durch die Dateien "blättern" dann 'true' der Sub übergeben
        Me.Navigate(True)

    End Sub

    Private Sub btnPreviousFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreviousFile.Click

        '== wenn rückwärts durch die Dateien "blättern" dann 'false' der Sub übergeben
        Me.Navigate(False)

    End Sub

    Private Sub Navigate(ByVal next_ As Boolean)

        '== beim ersten durchlauf nicht den Zähler "anrühren"
        If Not firstRun Then
            If next_ Then
                '== einen Stelle im Index vor
                If sourceFiles.Count - 1 > Me.nextIndexIs Then Me.nextIndexIs += 1
            Else
                '== einen Stelle im Index zurück
                If 0 < Me.nextIndexIs Then Me.nextIndexIs -= 1
            End If
        Else
            '== wenn es der Erste Durchlauf war auf 'false' setzen
            Me.firstRun = False
        End If


        For i = 0 To Me.sourceFiles.Count - 1
            '== wenn der Index der Datei erreicht
            If Me.nextIndexIs = i Then
                '== die gesamte Datei in die TextBox laden
                Me.txtLoadedFile.Text = File.ReadAllText(Me.sourceFiles(i))

                '== und die For-Schleife verlassen
                Exit For
            End If
        Next

    End Sub


End Class



//edit

... ist der Anhang jetzt dran? (-_-)
 

Anhänge

Zuletzt bearbeitet:
Super, vielen Dank
Jetzt läufts.

Der Tipp mit dem Dictionary war, was mir noch fehlte. :)

Danke viel mal an alle die geholfen haben
Gruss Gilrich
 
Zurück
Oben