共用方式為


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

更新:2007 年 11 月

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

注意事項:

對話方塊中所提供的選項,以及您所看到的功能表命令的名稱和位置,會根據使用中的設定或版本而有所不同,所以可能會和說明中所描述的不一樣。撰寫這個說明網頁時已將 [一般開發設定] 納入考慮。若要變更設定,請從 [工具] 功能表中選擇 [匯入和匯出設定]。如需詳細資訊,請參閱 Visual Studio 設定

建立應用程式

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

若要建立專案

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

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

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

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

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

    物件

    屬性

    Button

    Name

    Text

    Submit

    Submit Entry

    Button

    Name

    Text

    Clear

    Clear Entry

    TextBox

    Name

    Text

    Multiline

    Entry

    Please enter something.

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

將顯示功能加入至日記簿

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

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

控制項

屬性

TextBox

Name

Visible

Size

Multiline

DisplayEntry

False

120,60

True

Button

Name

Text

Display

Display

Button

Name

Text

GetEntries

Get Entries

ComboBox

Name

Text

Enabled

PickEntries

Select an Entry

False

若要填入下拉式方塊

  1. PickEntriesComboBox 用於顯示使用者送出每個項目的日期,讓使用者可以從特定日期選取項目。建立 GetEntries 按鈕的 Click 事件處理常式,並加入下列程式碼。

    Dim fr As StreamReader
    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 中。

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

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

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

控制項

屬性

Button

Name

Text

Enabled

DeleteEntry

Delete Entry

False

Button

Name

Text

Enabled

EditEntry

Edit Entry

False

Button

Name

Text

Enabled

SubmitEdit

Submit Edit

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 以確認刪除。

請參閱

參考

StreamReader

StreamWriter

其他資源

Visual Basic 語言逐步解說