共用方式為


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

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

注意事項注意事項

您的電腦對於下列指示中某些 Visual Studio 使用者介面項目的名稱或位置,可能會顯示不同的資訊:您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱<Visual Studio 中的自訂開發設定>。

建立應用程式

啟動 Visual Studio,並且藉由建立使用者可用於寫入至指定之檔案的表單,以便開始專案。

若要建立專案

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

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

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

    Visual Studio 會將專案加入 [方案總管] 中,並開啟 [Windows Form 設計工具]。

  4. 將下表中的控制項加入至表單,並且設定相對應的屬性值。

物件

屬性

Button

名稱

文字

Submit

送出項目

Button

名稱

文字

Clear

清除項目

TextBox

名稱

文字

Multiline

Entry

請輸入

False

寫入至檔案

若要加入透過應用程式寫入檔案的能力,請使用 StreamWriter 類別。 StreamWriter 是為特定編碼方式的字元輸出而設計,而 Stream 類別則是為位元組輸入和輸出而設計。 使用 StreamWriter 將資訊行寫入至標準文字檔。 如需 StreamWriter 類別的詳細資訊,請參閱 StreamWriter

若要加入寫入功能

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

  2. 因為應用程式會參考 System.IO 命名空間,所以請將下列陳述式加在程式碼的起始處 (需在以 Public Class Form1 開頭的表單類別宣告之前)。

    Imports System
    Imports System.IO
    

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

  3. 從 [檢視] 功能表,選擇 [設計工具] 以返回 [Windows Form 設計工具]。 按兩下 [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 = ""
    

將顯示功能加入至日記簿

在本節中,您將加入一個可在 DisplayEntry TextBox 中顯示最新項目的功能。 另外,也可以加入能顯示各種項目的 ComboBox,使用者可以由此處選取要在 DisplayEntry TextBox 中顯示的項目。 StreamReader 類別的執行個體會從 MyDiary.txt 讀取。 如同 StreamWriter 類別,StreamReader 主要用於文字檔。

針對本逐步解說章節,將下表中的控制項加入至表單,並且設定相對應的屬性 (Property) 值。

控制項

屬性

TextBox

名稱

Visible

Size

Multiline

DisplayEntry

False

120,60

True

Button

名稱

文字

Display

Display

Button

名稱

文字

GetEntries

取得項目

ComboBox

名稱

文字

Enabled

PickEntries

選取項目

False

若要填入下拉式方塊

  1. PickEntries ComboBox 用於顯示使用者送出每個項目的日期,讓使用者可以從特定日期選取項目。 建立 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 選取項目,再按一下 [顯示]。 所選取項目的內容會顯示在 DisplayEntry TextBox 中。

讓使用者能夠刪除或修改項目

最後,您可以納入其他功能,讓使用者能夠使用 DeleteEntry 和 EditEntry 按鈕,刪除或修改項目。 這兩個按鈕在項目顯示之前會維持在停用狀態。

將下表中的控制項加入至表單,並且設定相對應的屬性值。

控制項

屬性

Button

名稱

文字

Enabled

DeleteEntry

刪除項目

False

Button

名稱

文字

Enabled

EditEntry

編輯項目

False

Button

名稱

文字

Enabled

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 編譯應用程式。 按一下 [取得項目]、選取項目,再按一下 [顯示]。 項目會顯示在 DisplayEntry TextBox 中。 按一下 [編輯項目]。 項目會顯示在 Entry TextBox 中。 編輯 Entry TextBox 中的項目,並且按一下 [送出編輯結果]。 開啟 MyDiary.txt 檔案以確認修正。 現在,選取項目並按一下 [刪除項目]。 當 MessageBox 要求確認時,請按一下 [確定]。 關閉應用程式並開啟 MyDiary.txt 以確認刪除。

請參閱

參考

StreamReader

StreamWriter

其他資源

Visual Basic 語言逐步解說