Walkthrough: Manipulating Files by Using .NET Framework Methods (Visual Basic)

 

Die neueste Dokumentation zu Visual Studio 2017 RC finden Sie unter Visual Studio 2017 RC Documentation (Dokumentation zu Visual Studio 2017 RC).

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.

System_CAPS_ICON_note.jpg Hinweis

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Personalisieren der IDE.

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.

ObjektEigenschaftenWert
ButtonName

 Text
Submit

Eintrag übermitteln
ButtonName

 Text
Clear

Eintrag leeren
TextBoxName

 Text

 Multiline
Eintrag

Bitte geben Sie Text ein.

 False

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

  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
    

System_CAPS_ICON_note.jpg 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 = ""
    

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.

SteuerelementEigenschaftenWerte
TextBoxName

 Visible

 Größe

 Multiline
DisplayEntry

 False

 120,60

 True
ButtonName

 Text
Anzeige

Anzeige
ButtonName

 Text
GetEntries

Einträge abrufen
ComboBoxName

 Text

 Aktiviert
PickEntries

Eintrag auswählen

 False

So füllen Sie das Kombinationsfeld mit Daten

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

  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 DisplayEntry TextBox angezeigt.

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.

SteuerelementEigenschaftenWerte
ButtonName

 Text

 Aktiviert
DeleteEntry

Eintrag löschen

 False
ButtonName

 Text

 Aktiviert
EditEntry

Eintrag bearbeiten

 False
ButtonName

 Text

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

StreamReader
StreamWriter
Walkthroughs

Anzeigen: