Exemplarische Vorgehensweise: Bearbeiten von Dateien mit .NET Framework-Methoden

Aktualisiert: November 2007

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.

Hinweis:

Die in einem Dialogfeld verfügbaren Optionen sowie die Namen und Positionen der angezeigten Menübefehle können sich je nach den persönlichen aktiven Einstellungen oder der verwendeten Version von den in der Hilfe beschriebenen Optionen unterscheiden. Diese Hilfeseite wurde unter Berücksichtigung der Option Allgemeine Entwicklungseinstellungen geschrieben. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren, um die Einstellungen zu ändern. 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

  1. Wählen Sie im Menü Datei die Option Neues Projekt aus.

  2. Klicken Sie im Bereich Neues Projekt auf Windows-Anwendung.

  3. 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.

  4. Fügen Sie dem Formular die in der folgenden Tabelle genannten Steuerelemente hinzu, und legen Sie deren Eigenschaften wie beschrieben fest.

    Objekt

    Eigenschaften

    Wert

    Button

    Name

    Text

    Submit

    Eintrag übermitteln

    Button

    Name

    Text

    Clear

    Eintrag leeren

    TextBox

    Name

    Text

    Multiline

    Entry

    Bitte geben Sie Text ein.

    False

Schreiben in die Datei

Verwenden Sie zum Schreiben von Dateien die StreamWriter-Klasse. StreamWriter ist für die Zeichenausgabe in einer bestimmten Codierung vorgesehen, die Stream-Klasse dagegen für die Byteein- und -ausgabe. Verwenden Sie StreamWriter, um Zeilen mit Informationen in eine Standardtextdatei zu schreiben. Weitere Informationen über die StreamWriter-Klasse finden Sie unter StreamWriter-Klasse.

So fügen Sie die Funktionalität für das Schreiben hinzu

  1. Klicken Sie im Menü Ansicht auf Code, um den Code-Editor zu öffnen.

  2. 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.

  3. 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
    
Hinweis:

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.

  1. 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
    
  2. 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
    
  3. 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)
    
  4. 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 DisplayEntryTextBox 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 DisplayEntryTextBox 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

TextBox

Name

Visible

Size

Multiline

DisplayEntry

False

120,60

True

Button

Name

Text

Display

Display

Button

Name

Text

GetEntries

Einträge abrufen

ComboBox

Name

Text

Enabled

PickEntries

Eintrag auswählen

False

So füllen Sie das Kombinationsfeld mit Daten

  1. In der PickEntriesComboBox 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
    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
    
  2. 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

  1. 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
    
  2. 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 DisplayEntryTextBox 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

Button

Name

Text

Enabled

DeleteEntry

Eintrag löschen

False

Button

Name

Text

Enabled

EditEntry

Eintrag bearbeiten

False

Button

Name

Text

Enabled

SubmitEdit

Änderung übermitteln

False

So ermöglichen Sie das Löschen und Bearbeiten von Einträgen

  1. Fügen Sie dem Click-Ereignis der Display-Schaltfläche nach DisplayEntry.Text = ReadString folgenden Code hinzu.

    DeleteEntry.enabled = True
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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 DisplayEntryTextBox angezeigt. Klicken Sie auf Eintrag bearbeiten. Der Eintrag wird in der EntryTextBox angezeigt. Bearbeiten Sie den Eintrag in der EntryTextBox, 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.

Siehe auch

Referenz

StreamReader

StreamWriter

Weitere Ressourcen

Exemplarische Vorgehensweisen für Visual Basic