Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0136: Textdateien schreiben und lesen

 von 

Beschreibung

In diesem Tipp wird gezeigt wie man Textdateien schreiben und lesen kann. Die Verwaltung des Verzeichnisses und der Datei wird mit der FileInfo-Klasse erledigt.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, .NET Compact Framework 1.0, .NET Compact Framework 2.0, .NET Framework 4

.NET-Version(en):

Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008, Visual Basic 2010

Download:

Download des Beispielprojektes [12,39 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2008
' Option Strict:    An
' Option Explicit:  An
' Option Infer:     Aus
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Deployment
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'  - System.Core
'  - System.Xml.Linq
'  - System.Data.DataSetExtensions
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Data
'  - System.Drawing
'  - System.Diagnostics
'  - System.Windows.Forms
'  - System.Linq
'  - System.Xml.Linq
'

' ##############################################################################
' ################################# Form1.vb ###################################
' ##############################################################################
Public Class Form1
    Private myFileInfo As New IO.FileInfo("C:\TestText\Test.txt")

    Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load

        ' Erst schauen wir nach ob das Verzeichnis existiert
        If Not IO.Directory.Exists(myFileInfo.DirectoryName) Then
            ' Wenn nicht, soerzeugen wir es
            myFileInfo.Directory.Create()
        End If

        ' Nun schauen wir nach ob eine Textdatei namens "Test.txt" existiert
        If Not myFileInfo.Exists Then
            ' Wenn nicht erzeugen wir eine Liste von Strings, die wir später 
            '  speichern wollen
            Dim saveList As New List(Of String)
            For i As Integer = 1 To 10
                saveList.Add("Zeile - " & i.ToString)
            Next

            ' Und nun speichern wir unseren Text. Da wir uns schon versichert 
            '  haben, dass das Verzeichnis existiert können wir uns hier eine 
            '  weitere Überprüfung sparen
            Me.Write(saveList)
        End If
        ' Nun können wir den Text einlesen und in der Textbox anzeigen
        Me.LoadTextToBox(Me.TextBox1)
    End Sub

    Private Sub Write(ByVal text As List(Of String))
        ' Wir schauen ob die Datei existiert
        If myFileInfo.Exists Then
            'Wenn ja löschen wir sie
            myFileInfo.Delete()
        End If

        ' Wir verwenden Using damit wir uns nicht um das den Aufruf von Dispose
        '  kümmern müssen. Mit OpenOrCreate stellen wir sicher, dass die Datei 
        '  erzeugt wird, wenn sie noch nicht existiert
        Using fs As IO.FileStream = myFileInfo.Open(IO.FileMode.OpenOrCreate, _
                IO.FileAccess.Write)

            ' Damit wir schreiben können, erzeugen wir einen Writer
            Using sw As New IO.StreamWriter(fs)
                ' Nun durchlaufen wir jede Ziele in unserem Text
                For Each s As String In text
                    ' Und schreiben die Zeilen in den Stream
                    sw.WriteLine(s)
                Next

                ' Das schreiben der Daten erzwingen. Damit stellen wir sicher, 
                '  dass wir im Anschluss direkt wieder auf die Textdatei 
                '  zugreifen können. Ohne diesen Aufruf schreibt Windows die 
                '  Daten wann es will und blockiert weitere Zugriffe
                sw.Flush()
            End Using
        End Using
    End Sub

    Private Function Read() As List(Of String)
        ' Erst benötigen wir eine Liste die den Text aufnimmt
        Dim textList As New List(Of String)
        ' Wir benötigen erst mal einen FileStream. Wir verwenden Using damit 
        '  wir uns um das Aufräumen nicht kümmern müssen 
        Using fs As IO.FileStream = _
                myFileInfo.Open(IO.FileMode.Open, IO.FileAccess.Read)

            ' Damit wir lesen können erzeugen wir einen Reader
            Using sr As New IO.StreamReader(fs)
                ' Nun durchlaufen wir jede Zeile in unserem Text bis wir das 
                '  Ende des Streams erreicht haben
                Do While Not sr.EndOfStream
                    textList.Add(sr.ReadLine)
                Loop
            End Using
        End Using

        ' Nachdem nun alle Zeilen des Textes in der Liste sind, liefern wir 
        '  diese zurück
        Return textList
    End Function

    Private Sub LoadTextToBox(ByVal txt As TextBox)
        ' Hier stellen wir eine Liste bereit in der wir den Text sichern wollen
        Dim readList As List(Of String)
        ' Den Text lesen und in der Liste sichern
        readList = Me.Read()
        ' Nun können wir den Text anzeigen
        txt.Lines = readList.ToArray
    End Sub

    Private Sub SaveTextToFile(ByVal txt As TextBox)
        'Hier stellen wir eine Liste bereit in der wir den Text halten
        Dim saveList As New List(Of String)
        'Den Text in die Liste laden
        saveList.AddRange(txt.Lines)
        'Nun können wir den Text speichern
        Me.Write(saveList)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click

        Me.LoadTextToBox(Me.TextBox1)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button2.Click

        Me.SaveTextToFile(Me.TextBox1)
    End Sub
End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Danke... - DL9LD 25.12.16 15:28 2 Antworten