VB.NET-Tipp 0136: Textdateien schreiben und lesen
von Robert Closheim
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: | 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: |
' 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.