Share via


逐步解說:使用 .NET Framework 方法管理檔案 (Visual Basic)

本逐步解說示範如何使用 StreamReader 類別開啟和讀取檔案、檢查是否正在存取檔案、在 StreamReader 類別執行個體讀取的檔案內搜尋字串,並使用 StreamWriter 類別寫入檔案。

注意

在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置: 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱將 Visual Studio IDE 個人化

建立應用程式

若要啟動 Visual Studio 並開始專案,您可以建立表單,以供使用者寫入至指定的檔案。

建立專案

  1. 在 [檔案] 功能表上,選取 [新增專案]

  2. 按一下 [新增專案] 窗格的 [Windows 應用程式]。

  3. 在 [名稱] 方塊中,輸入 MyDiary 並按一下 [確定]。

    Visual Studio 即會將專案新增至 [方案總管],並開啟 [Windows Form 設計工具]

  4. 將下表的控制項新增至表單,並設定其屬性的對應值。

Object 屬性
Button 名稱

Text
Submit

提交項目
Button 名稱

Text
Clear

清除項目
TextBox 名稱

Text

多行
Entry

請輸入某些內容。

False

寫入檔案

若要新增透過應用程式寫入檔案的功能,請使用 StreamWriter 類別。 StreamWriter 是專為以特定的編碼方式輸出字元而量身打造,而Stream 類別則是針對位元組輸入和輸出而設計。 使用 StreamWriter 將資訊行寫入標準文字檔案。 如需 StreamWriter 類別的詳細資訊,請參閱 StreamWriter

若要新增寫入功能

  1. 從 [檢視] 功能表上,選擇 [程式碼] 以開啟程式碼編輯器。

  2. 由於應用程式會參考 System.IO 命名空間,因此請在表單類別宣告開始之前 (其會開始 Public Class Form1),於程式碼開頭加入下列陳述式。

    Imports System.IO
    

    在寫入檔案之前,您必須建立 StreamWriter 類別的執行個體。

  3. 從 [檢視] 功能表上,選擇 [設計工具] 以返回 Windows Forms 設計工具。 按兩下 Submit 按鈕,建立該按鈕的 Click 事件處理常式,然後加入下列程式碼。

    Dim fw As StreamWriter
    

注意

Visual Studio 整合式開發環境 (IDE) 會返回程式碼編輯器,並在事件處理常式中放入您應該新增程式碼的位置插入點。

  1. 若要寫入檔案,請使用 StreamWriter 類別的 Write 方法。 將下列程式碼新增至 Dim fw As StreamWriter 正後方。 您不用擔心系統會在找不到檔案時擲回例外狀況,因為若檔案不存在,系統會加以建立。

    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. 您可在 Dim ReadString As String 正後方加入下列程式碼,確定使用者無法提交空白項目。

    If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then
        Entry.Text = "Please enter something."
        Return
    End If
    
  3. 由於此為日記,因此使用者會需要針對每個項目指派日期。 在 fw = New StreamWriter("C:\MyDiary.txt", True) 之後插入下列程式碼,以將 Today 變數設為目前的日期。

    Dim Today As DateTime
    Today = Now
    fw.Write(CStr(Today))
    fw.Write(ControlChars.CrLf)
    
  4. 最後,附加程式碼來清除 TextBox。 將下列程式碼加入 Clear 按鈕的 Click 事件。

    Entry.Text = ""
    

新增日記的顯示功能

在本節中,您會新增功能以顯示 DisplayEntryTextBox 中的最新項目。 您也可以新增 ComboBox 以顯示各種項目,使用者可以從中選取要在 DisplayEntryTextBox 中顯示的項目。 StreamReader 類別的執行個體會讀取 MyDiary.txt。 像 StreamWriter 類別一樣,StreamReader 適用於文字檔案。

在本節逐步解說中,請將下表的控制項新增至表單,並設定其屬性的對應值。

控制 屬性
TextBox 名稱

Visible

大小

多行
DisplayEntry

False

120,60

True
Button 名稱

Text
Display

顯示
Button 名稱

Text
GetEntries

取得項目
ComboBox 名稱

Text

已啟用
PickEntries

選取項目

False

若要填入下拉式方塊

  1. 系統會使用 PickEntriesComboBox 來顯示使用者提交每個項目的日期,因此使用者可以選取特定日期的項目。 對 GetEntries 按鈕建立 Click 事件處理常式,並加入下列程式碼。

    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. 若要測試您的程式碼,請按 F5 以編譯應用程式,然後按一下 [取得項目]。ComboBox 中按一下下拉式箭號以顯示項目日期。

若要選擇並顯示個別項目

  1. Display 按鈕建立 Click 事件處理常式,並加入下列程式碼。

    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. 若要測試您的程式碼,請按 F5 以編譯應用程式,然後提交項目。 按一下 [取得項目],從 ComboBox 選取項目,然後按一下 [顯示]。 選取項目的內容會出現在 DisplayEntryTextBox 中。

讓使用者可以刪除或修改項目

最後,您可以包含其他功能,讓使用者可以利用 DeleteEntryEditEntry 按鈕,刪除或修改項目。 未顯示項目時,這兩個按鈕皆為停用狀態。

將下表的控制項新增至表單,並設定其屬性的對應值。

控制 屬性
Button 名稱

Text

已啟用
DeleteEntry

刪除項目

False
Button 名稱

Text

已啟用
EditEntry

編輯項目

False
Button 名稱

Text

已啟用
SubmitEdit

提交編輯

False

若要啟用項目的刪除和修改功能

  1. 將下列程式碼加入 Display 按鈕的 Click 事件,放在 DisplayEntry.Text = ReadString 之後。

    DeleteEntry.enabled = True
    
  2. DeleteEntry 按鈕建立 Click 事件處理常式,並加入下列程式碼。

    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. 當使用者顯示項目時,EditEntry 按鈕即變成啟用。 將下列程式碼加入 Display 按鈕的 Click 事件,放在 DisplayEntry.Text = ReadString 之後。

    EditEntry.Enabled = True
    
  4. EditEntry 按鈕建立 Click 事件處理常式,並加入下列程式碼。

    Entry.Text = DisplayEntry.Text
    SubmitEdit.Enabled = True
    
  5. SubmitEdit 按鈕建立 Click 事件處理常式,並加入下列程式碼

    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
    

若要測試您的程式碼,請按 F5 以編譯應用程式。 按一下 [取得項目],並選取項目,然後按一下 [顯示]。 此項目會出現在 DisplayEntryTextBox 中。 按一下 [編輯項目]。 此項目會出現在 EntryTextBox 中。 編輯 EntryTextBox 中的項目,然後按一下 [提交編輯]。 開啟 MyDiary.txt 檔案,確認您的修正。 現在,選取項目,然後按一下 [刪除項目]。 當 MessageBox 要求確認時,請按一下 [確定]。 關閉應用程式,並開啟 MyDiary.txt 以確認刪除。

另請參閱