Wskazówki: manipulowanie plikami za pomocą metod .NET Framework (Visual Basic)

W tym przewodniku pokazano, jak otworzyć i odczytać plik przy użyciu StreamReader klasy, sprawdzić, czy plik jest uzyskiwany, wyszukiwać ciąg w pliku odczytanym z wystąpieniem StreamReader klasy i zapisywać w pliku przy użyciu StreamWriter klasy .

Uwaga

Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.

Tworzenie aplikacji

Uruchom program Visual Studio i rozpocznij projekt, tworząc formularz, którego użytkownik może użyć do zapisania w wyznaczonym pliku.

Aby utworzyć projekt

  1. W menu Plik wybierz pozycję Nowy projekt.

  2. W okienku Nowy projekt kliknij pozycję Aplikacja systemu Windows.

  3. W polu Nazwa wpisz MyDiary i kliknij przycisk OK.

    Program Visual Studio dodaje projekt do Eksplorator rozwiązań, a zostanie otwarty Projektant Windows Forms.

  4. Dodaj kontrolki w poniższej tabeli do formularza i ustaw odpowiednie wartości dla ich właściwości.

Obiekt Właściwości Wartość
Button Nazwa/nazwisko

Tekst
Submit

Prześlij wpis
Button Nazwa/nazwisko

Tekst
Clear

Wyczyść wpis
TextBox Nazwa/nazwisko

Tekst

Wielowierszowego
Entry

Wprowadź coś.

False

Zapisywanie w pliku

Aby dodać możliwość zapisu do pliku za pośrednictwem aplikacji, użyj StreamWriter klasy . StreamWriter jest przeznaczony dla danych wyjściowych znaków w określonym kodowaniu, natomiast Stream klasa jest przeznaczona dla bajtowych danych wejściowych i wyjściowych. Służy StreamWriter do pisania wierszy informacji w standardowym pliku tekstowym. Aby uzyskać więcej informacji na StreamWriter temat klasy, zobacz StreamWriter.

Aby dodać funkcję pisania

  1. W menu Widok wybierz pozycję Kod, aby otworzyć Edytor kodu.

  2. Ponieważ aplikacja odwołuje się do przestrzeni nazw, dodaj następujące instrukcje System.IO na samym początku kodu, przed deklaracją klasy dla formularza, który rozpoczyna się .Public Class Form1

    Imports System.IO
    

    Przed zapisaniem w pliku należy utworzyć wystąpienie StreamWriter klasy.

  3. Z menu Widok wybierz pozycję Projektant, aby powrócić do Projektant Windows Forms. Kliknij dwukrotnie przycisk, Submit aby utworzyć procedurę Click obsługi zdarzeń dla tego przycisku, a następnie dodaj następujący kod.

    Dim fw As StreamWriter
    

Uwaga

Zintegrowane środowisko projektowe (IDE) programu Visual Studio powróci do Edytora kodu i umieści punkt wstawiania w programie obsługi zdarzeń, w którym należy dodać kod.

  1. Aby zapisać w pliku, użyj Write metody StreamWriter klasy . Dodaj następujący kod bezpośrednio po pliku Dim fw As StreamWriter. Nie musisz martwić się, że wyjątek zostanie zgłoszony, jeśli plik nie zostanie znaleziony, ponieważ zostanie utworzony, jeśli jeszcze nie istnieje.

    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. Upewnij się, że użytkownik nie może przesłać pustego wpisu, dodając następujący kod bezpośrednio po Dim ReadString As String.

    If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then
        Entry.Text = "Please enter something."
        Return
    End If
    
  3. Ponieważ jest to dziennik, użytkownik będzie chciał przypisać datę do każdego wpisu. Wstaw następujący kod po fw = New StreamWriter("C:\MyDiary.txt", True) ustawieniu zmiennej Today na bieżącą datę.

    Dim Today As DateTime
    Today = Now
    fw.Write(CStr(Today))
    fw.Write(ControlChars.CrLf)
    
  4. Na koniec dołącz kod, aby wyczyścić element TextBox. Dodaj następujący kod do Clear zdarzenia przycisku Click .

    Entry.Text = ""
    

Dodawanie funkcji wyświetlania do dziennika

W tej sekcji dodasz funkcję, która wyświetla najnowszy wpis w pliku DisplayEntryTextBox. Można również dodać element ComboBox , który wyświetla różne wpisy i z których użytkownik może wybrać wpis do wyświetlenia w obiekcie DisplayEntryTextBox. Wystąpienie StreamReader klasy odczytuje element z klasy MyDiary.txt. Podobnie jak klasa, StreamReader jest przeznaczona StreamWriter do użycia z plikami tekstowymi.

W tej sekcji przewodnika dodaj kontrolki w poniższej tabeli do formularza i ustaw odpowiednie wartości dla ich właściwości.

Kontrola Właściwości Wartości
TextBox Nazwa/nazwisko

Visible

Rozmiar

Wielowierszowego
DisplayEntry

False

120,60

True
Button Nazwa/nazwisko

Tekst
Display

Wyświetl
Button Nazwa/nazwisko

Tekst
GetEntries

Pobieranie wpisów
ComboBox Nazwa/nazwisko

Tekst

Włączono
PickEntries

Wybieranie wpisu

False

Aby wypełnić pole kombi

  1. Służy PickEntriesComboBox do wyświetlania dat, w których użytkownik przesyła każdy wpis, aby użytkownik mógł wybrać wpis z określonej daty. Utwórz procedurę obsługi zdarzeń Click do GetEntries przycisku i dodaj następujący kod.

    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. Aby przetestować kod, naciśnij klawisz F5, aby skompilować aplikację, a następnie kliknij pozycję Pobierz wpisy. Kliknij strzałkę listy rozwijanej w obiekcie ComboBox , aby wyświetlić daty wprowadzania.

Aby wybrać i wyświetlić poszczególne wpisy

  1. Utwórz procedurę obsługi zdarzeń Click dla Display przycisku i dodaj następujący kod.

    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. Aby przetestować kod, naciśnij klawisz F5, aby skompilować aplikację, a następnie prześlij wpis. Kliknij pozycję Pobierz wpisy, wybierz wpis z listy ComboBox, a następnie kliknij pozycję Wyświetl. Zawartość wybranego wpisu jest wyświetlana w pliku DisplayEntryTextBox.

Umożliwianie użytkownikom usuwania lub modyfikowania wpisów

Na koniec możesz uwzględnić dodatkowe funkcje umożliwiające użytkownikom usuwanie lub modyfikowanie wpisu przy użyciu przycisków DeleteEntry i EditEntry . Oba przyciski pozostają wyłączone, chyba że zostanie wyświetlony wpis.

Dodaj kontrolki w poniższej tabeli do formularza i ustaw odpowiednie wartości dla ich właściwości.

Kontrola Właściwości Wartości
Button Nazwa/nazwisko

Tekst

Włączono
DeleteEntry

Usuń wpis

False
Button Nazwa/nazwisko

Tekst

Włączono
EditEntry

Edytuj wpis

False
Button Nazwa/nazwisko

Tekst

Włączono
SubmitEdit

Prześlij edycję

False

Aby włączyć usuwanie i modyfikowanie wpisów

  1. Dodaj następujący kod do Display zdarzenia przycisku Click po DisplayEntry.Text = ReadString.

    DeleteEntry.enabled = True
    
  2. Utwórz procedurę obsługi zdarzeń Click dla DeleteEntry przycisku i dodaj następujący kod.

    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. Gdy użytkownik wyświetli wpis, EditEntry przycisk zostanie włączony. Dodaj następujący kod do Click zdarzenia Display przycisku po DisplayEntry.Text = ReadString.

    EditEntry.Enabled = True
    
  4. Utwórz procedurę obsługi zdarzeń Click dla EditEntry przycisku i dodaj następujący kod.

    Entry.Text = DisplayEntry.Text
    SubmitEdit.Enabled = True
    
  5. Utwórz procedurę obsługi zdarzeń Click dla SubmitEdit przycisku i dodaj następujący kod

    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
    

Aby przetestować kod, naciśnij klawisz F5, aby skompilować aplikację. Kliknij pozycję Pobierz wpisy, wybierz wpis, a następnie kliknij pozycję Wyświetl. Wpis pojawi się w pliku DisplayEntryTextBox. Kliknij pozycję Edytuj wpis. Wpis pojawi się w pliku EntryTextBox. Edytuj wpis w pliku EntryTextBox i kliknij pozycję Prześlij edycję. Otwórz plik, MyDiary.txt aby potwierdzić korektę. Teraz wybierz wpis i kliknij pozycję Usuń wpis. Po potwierdzeniu MessageBox żądań kliknij przycisk OK. Zamknij aplikację i otwórz, MyDiary.txt aby potwierdzić usunięcie.

Zobacz też