Exemplarische Vorgehensweise: Bearbeiten von Dateien mit .NET Framework-Methoden (Visual Basic)
In dieser exemplarischen Vorgehensweise wird erläutert, wie Sie mithilfe der StreamReader-Klasse Dateien öffnen und lesen, mit einer Instanz der StreamReader-Klasse in eingelesenen Dateien nach einer Zeichenfolge suchen und mithilfe der StreamWriter-Klasse in Dateien schreiben.
Tipp
Ihr Computer zeigt möglicherweise für einige der Elemente der Visual Studio-Benutzeroberfläche in der folgenden Anleitung andere Namen oder Standorte an. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.
Erstellen der Anwendung
Starten Sie Visual Studio, und beginnen Sie mit dem Projekt, indem Sie ein Formular erstellen, das der Benutzer zum Schreiben in die vorgesehene Datei verwenden kann.
So erstellen Sie das Projekt
Wählen Sie im Menü Datei die Option Neues Projekt aus.
Klicken Sie im Bereich Neues Projekt auf Windows-Anwendung.
Geben Sie im Feld Name die Bezeichnung MyDiary ein, und klicken Sie auf OK.
Das Projekt wird von Visual Studio dem Projektmappen-Explorer hinzugefügt, und der Windows Forms-Designer wird geöffnet.
Fügen Sie dem Formular die in der folgenden Tabelle genannten Steuerelemente hinzu, und legen Sie deren Eigenschaften wie beschrieben fest.
Objekt |
Eigenschaften |
Value |
Name Text |
Submit Eintrag übermitteln |
|
Name Text |
Clear Eintrag leeren |
|
Name Text Multiline |
Eintrag Bitte geben Sie Text ein. False |
Schreiben in die Datei
Verwenden Sie die StreamWriter-Klasse, um die Möglichkeit hinzuzufügen, über die Anwendung in eine Datei zu schreiben. Mit StreamWriter werden Zeichen in einer bestimmten Codierung ausgegeben. Die Stream-Klasse wird dagegen zur Eingabe und Ausgabe von Bytes verwendet. Verwenden Sie StreamWriter, um Zeilen mit Informationen in eine Standardtextdatei zu schreiben. Weitere Informationen zur StreamWriter-Klasse finden Sie unter StreamWriter.
So fügen Sie die Funktionalität für das Schreiben hinzu
Klicken Sie im Menü Ansicht auf Code, um den Code-Editor zu öffnen.
Da die Anwendung auf den System.IO-Namespace verweist, fügen Sie die folgenden Anweisungen ganz am Anfang des Codes ein, vor der Klassendeklaration für das Formular, die mit Public Class Form1 beginnt.
Imports System Imports System.IO
Vor dem Schreiben in die Datei müssen Sie eine Instanz einer StreamWriter-Klasse erstellen.
Klicken Sie im Menü Ansicht auf Designer, um zum Windows Forms-Designer zurückzuwechseln. Doppelklicken Sie auf die Schaltfläche Submit, um einen Click-Ereignishandler für die Schaltfläche zu erstellen, und fügen Sie dann den folgenden Code hinzu.
Dim fw As StreamWriter
Tipp
Die integrierte Entwicklungsumgebung (IDE) von Visual Studio wechselt zum Code-Editor zurück und positioniert die Einfügemarke im Event-Handler, in dem der Code hinzugefügt werden soll.
Verwenden Sie zum Schreiben der Datei die Write-Methode der StreamWriter-Klasse. Fügen Sie folgenden Code direkt nach Dim fw As StreamWriter ein. Wenn die Datei nicht gefunden wird, wird keine Ausnahme ausgelöst, sondern die Datei wird erstellt.
Dim ReadString As String Try 'Pass the file path and name to the StreamWriter constructor. 'Indicate that Append is True, so file will not be overwritten. fw = New StreamWriter("C:\MyDiary.txt", True) ReadString = Entry.Text fw.WriteLine(ReadString) Finally 'Close the file. fw.Close() End Try
Um sicherzustellen, dass der Benutzer keinen leeren Eintrag übermitteln kann, fügen Sie folgenden Code direkt nach Dim ReadString As String ein.
If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then Entry.Text = "Please enter something." Return End If
Da es sich hier um ein Tagebuch handelt, will der Benutzer wahrscheinlich jeden Eintrag mit einem Datum versehen. Fügen Sie nach fw = New StreamWriter("C:\MyDiary.txt", True) folgenden Code ein, um die Variable Today auf das aktuelle Datum festzulegen.
Dim Today As DateTime Today = Now fw.Write(CStr(Today)) fw.Write(ControlChars.CrLf)
Fügen Sie anschließend Code zum Leeren der TextBox an. Fügen Sie hierzu dem Click-Ereignis der Schaltfläche Clear folgenden Code hinzu.
Entry.Text = ""
Hinzufügen von Anzeigefeatures zum Tagebuch
In diesem Abschnitt fügen Sie ein Feature hinzu, mit dem der letzte Eintrag in der DisplayEntry TextBox angezeigt wird. Sie können auch eine ComboBox hinzufügen, die mehrere Einträge anzeigt, und in der der Benutzer einen Eintrag für die Anzeige in der DisplayEntry TextBox auswählen kann. Eine Instanz der StreamReader-Klasse liest aus MyDiary.txt. Ebenso wie die StreamWriter-Klasse ist StreamReader für die Verwendung mit Textdateien vorgesehen.
In diesem Abschnitt der exemplarischen Vorgehensweise fügen Sie dem Formular die in der folgenden Tabelle genannten Steuerelemente hinzu und legen deren Eigenschaften wie beschrieben fest.
Steuerelement |
Eigenschaften |
Werte |
---|---|---|
Name Visible Größe Multiline |
DisplayEntry False 120,60 True |
|
Name Text |
Anzeige Anzeige |
|
Name Text |
GetEntries Einträge abrufen |
|
Name Text Aktiviert |
PickEntries Eintrag auswählen False |
So füllen Sie das Kombinationsfeld mit Daten
In der PickEntries ComboBox werden die Tage angezeigt, an denen die einzelnen Einträge übermittelt wurden, sodass ein Eintrag mit einem bestimmten Datum ausgewählt werden kann. Erstellen Sie einen Click-Ereignishandler für die GetEntries-Schaltfläche, und fügen Sie den folgenden Code hinzu.
Dim fr As StreamReader = Nothing Dim FileString As String FileString = "" Try fr = New System.IO.StreamReader("C:\MyDiary.txt") PickEntries.Items.Clear() PickEntries.Enabled = True Do FileString = fr.ReadLine If IsDate(FileString) Then PickEntries.Items.Add(FileString) End If Loop Until (FileString Is Nothing) Finally If fr IsNot Nothing Then fr.Close() End If End Try PickEntries.Enabled = True
Testen Sie den Code, indem Sie F5 drücken, um die Anwendung zu kompilieren, und klicken Sie dann auf Einträge abrufen. Klicken Sie auf den Abwärtspfeil in der ComboBox, um die Tage mit den einzelnen Einträgen anzuzeigen.
So wählen Sie einzelne Einträge aus und zeigen sie an
Erstellen Sie einen Click-Ereignishandler für die Display-Schaltfläche, und fügen Sie den folgenden Code hinzu.
Dim fr As StreamReader Dim ReadString As String 'Make sure ReadString begins empty. ReadString = "" Dim FileString As String fr = New StreamReader("C:\MyDiary.txt") 'If no entry has been selected, show the whole file. If PickEntries.Enabled = False Or PickEntries.SelectedText Is Nothing Then Do 'Read a line from the file into FileString. FileString = fr.ReadLine 'add it to ReadString ReadString = ReadString & ControlChars.CrLf & FileString Loop Until (FileString = Nothing) Else 'An entry has been selected, find the line that matches. Do FileString = fr.ReadLine Loop Until FileString = CStr(PickEntries.SelectedItem) FileString = CStr(PickEntries.SelectedItem) & ControlChars.CrLf ReadString = FileString & fr.ReadLine 'Read from the file until EOF or another Date is found. Do Until ((fr.Peek < 0) Or (IsDate(fr.ReadLine))) ReadString = ReadString & fr.ReadLine Loop End If fr.Close() DisplayEntry.Visible = True DisplayEntry.Text = ReadString
Testen Sie den Code, indem Sie F5 drücken, um die Anwendung zu kompilieren, und übermitteln Sie dann einen Eintrag. Klicken Sie auf Einträge abrufen, wählen Sie in der ComboBox einen Eintrag aus, und klicken Sie dann auf Anzeigen. Der Inhalt des ausgewählten Eintrags wird in der DisplayEntry TextBox angezeigt.
Benutzern die Möglichkeit zum Bearbeiten und Löschen von Einträgen geben
Sie können zusätzliche Features zum Bearbeiten und Löschen von Einträgen mit einer EditEntry-Schaltfläche und einer DeleteEntry-Schaltfläche integrieren. Beide Schaltflächen werden erst aktiviert, wenn ein Eintrag angezeigt wird.
Fügen Sie dem Formular die in der folgenden Tabelle genannten Steuerelemente hinzu, und legen Sie deren Eigenschaften wie beschrieben fest.
Steuerelement |
Eigenschaften |
Werte |
---|---|---|
Name Text Aktiviert |
DeleteEntry Eintrag löschen False |
|
Name Text Aktiviert |
EditEntry Eintrag bearbeiten False |
|
Name Text Aktiviert |
SubmitEdit Änderung übermitteln False |
So ermöglichen Sie das Löschen und Bearbeiten von Einträgen
Fügen Sie dem Click-Ereignis der Display-Schaltfläche nach DisplayEntry.Text = ReadString folgenden Code hinzu.
DeleteEntry.enabled = True
Erstellen Sie einen Click-Ereignishandler für die DeleteEntry-Schaltfläche, und fügen Sie den folgenden Code hinzu.
Dim fr As StreamReader Dim ReadString As String Dim WriteString As String Dim ConfirmDelete As MsgBoxResult fr = New StreamReader("C:\MyDiary.txt") ReadString = fr.ReadLine ' Read through the textfile Do Until (fr.Peek < 0) ReadString = ReadString & vbCrLf & fr.ReadLine Loop WriteString = Replace(ReadString, DisplayEntry.Text, "") fr.Close() ' Check to make sure the user wishes to delete the entry ConfirmDelete = MsgBox("Do you really wish to delete this entry?", MsgBoxStyle.OKCancel) If ConfirmDelete = MsgBoxResult.OK Then File.Delete("C:\MyDiary.txt") Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt") fw.WriteLine(WriteString) fw.Close() ' Reset controls on the form DisplayEntry.Text = "" PickEntries.Text = "" PickEntries.Items.Clear() PickEntries.Enabled = False DeleteEntry.Enabled = False End If
Wenn ein Benutzer einen Eintrag anzeigt, wird die EditEntry-Schaltfläche aktiviert. Fügen Sie dem Click-Ereignis der Display-Schaltfläche nach DisplayEntry.Text = ReadString folgenden Code hinzu.
EditEntry.Enabled = True
Erstellen Sie einen Click-Ereignishandler für die EditEntry-Schaltfläche, und fügen Sie den folgenden Code hinzu.
Entry.Text = DisplayEntry.Text SubmitEdit.Enabled = True
Erstellen Sie einen Click-Ereignishandler für die SubmitEdit-Schaltfläche, und fügen Sie den folgenden Code hinzu.
Dim fr As StreamReader Dim ReadString As String Dim WriteString As String If Entry.Text = "" Then MsgBox("Use Delete to Delete an Entry") Return End If fr = New StreamReader("C:\MyDiary.txt") ReadString = fr.ReadLine Do Until (fr.Peek < 0) ReadString = ReadString & vbCrLf & fr.ReadLine Loop WriteString = Replace(ReadString, DisplayEntry.Text, Entry.Text) fr.Close() File.Delete("C:\MyDiary.txt") Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt") fw.WriteLine(WriteString) fw.Close() DisplayEntry.Text = Entry.Text Entry.Text = "" EditEntry.Enabled = False SubmitEdit.Enabled = False
Testen Sie den Code, indem Sie F5 drücken, um die Anwendung zu kompilieren. Klicken Sie auf Einträge abrufen, wählen Sie einen Eintrag aus, und klicken Sie dann auf Anzeigen. Der Eintrag wird in der DisplayEntry TextBox angezeigt. Klicken Sie auf Eintrag bearbeiten. Der Eintrag wird in der Entry TextBox angezeigt. Bearbeiten Sie den Eintrag in der Entry TextBox, und klicken Sie auf Bearbeitung senden. Öffnen Sie die Datei MyDiary.txt, um die Änderung zu bestätigen. Wählen Sie jetzt einen Eintrag aus, und klicken Sie auf Eintrag löschen. Klicken Sie bei entsprechender Aufforderung durch die MessageBox auf OK, um den Löschvorgang zu bestätigen. Schließen Sie die Anwendung, und öffnen Sie die Datei MyDiary.txt, um die Löschung zu bestätigen.