Udostępnij za pomocą


Przewodnik: manipulowanie plikami przy użyciu metod .NET Framework (Visual Basic)

W tej instrukcji pokazano, jak otworzyć i odczytać plik przy użyciu klasy StreamReader, sprawdzić, czy plik jest używany, wyszukiwać ciąg znaków w pliku odczytanym za pomocą wystąpienia klasy StreamReader oraz zapisywać w pliku przy użyciu klasy StreamWriter.

Uwaga / Notatka

Na komputerze mogą być wyświetlane różne nazwy lub lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio w poniższych instrukcjach. Wersja programu Visual Studio i ustawienia, których używasz, określają te elementy. 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 Eksploratora rozwiązań, a zostanie otwarty program Windows Forms Designer .

  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

Tekst
Submit

Prześlij wpis
Button Nazwa

Tekst
Clear

Wyczyść wpis
TextBox Nazwa

Tekst

Wieloliniowy
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 jest klasą przeznaczoną do bajtowego wejścia i wyjścia. Użyj StreamWriter do zapisu informacji w standardowym pliku tekstowym. Aby uzyskać więcej informacji na temat klasy StreamWriter, 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 System.IO, dodaj następujące instrukcje na samym początku kodu, przed deklaracją klasy dla formularza, która rozpoczyna się Public Class Form1.

    Imports System.IO
    

    Przed zapisaniem w pliku należy utworzyć instancję klasy StreamWriter.

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

    Dim fw As StreamWriter
    

Uwaga / Notatka

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ć do pliku, użyj metody Write klasy StreamWriter. 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 zdarzenia Clear 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 StreamWriter klasa, StreamReader jest przeznaczona 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

widoczne

rozmiar

Wieloliniowy
DisplayEntry

False

120,60

True
Button Nazwa

Tekst
Display

Ekran
Button Nazwa

Tekst
GetEntries

Pobieranie wpisów
ComboBox Nazwa

Tekst

Włączono
PickEntries

Wybierz wpis

False

Aby wypełnić pole wyboru

  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 F5, aby skompilować aplikację, a następnie kliknij pozycję Pobierz wpisy. Kliknij strzałkę listy rozwijanej w polu ComboBox, aby wyświetlić daty wprowadzenia.

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

Tekst

Włączono
DeleteEntry

Usuń wpis

False
Button Nazwa

Tekst

Włączono
EditEntry

Edytuj wpis

False
Button Nazwa

Tekst

Włączono
SubmitEdit

Prześlij edycję

False

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

  1. Dodaj następujący kod do zdarzenia Display 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 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. Gdy MessageBox prosi o potwierdzenie, kliknij OK. Zamknij aplikację i otwórz, MyDiary.txt aby potwierdzić usunięcie.

Zobacz także