逐步解說:使用 .NET Framework 方法管理檔案 (Visual Basic)
本逐步解說示範如何使用 StreamReader 類別開啟和讀取檔案、檢查是否正在存取檔案、在 StreamReader 類別執行個體讀取的檔案內搜尋字串,並使用 StreamWriter 類別寫入檔案。
注意
在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置: 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱將 Visual Studio IDE 個人化。
建立應用程式
若要啟動 Visual Studio 並開始專案,您可以建立表單,以供使用者寫入至指定的檔案。
建立專案
在 [檔案] 功能表上,選取 [新增專案]。
按一下 [新增專案] 窗格的 [Windows 應用程式]。
在 [名稱] 方塊中,輸入
MyDiary
並按一下 [確定]。Visual Studio 即會將專案新增至 [方案總管],並開啟 [Windows Form 設計工具]。
將下表的控制項新增至表單,並設定其屬性的對應值。
Object | 屬性 | 值 |
---|---|---|
Button | 名稱 Text |
Submit 提交項目 |
Button | 名稱 Text |
Clear 清除項目 |
TextBox | 名稱 Text 多行 |
Entry 請輸入某些內容。 False |
寫入檔案
若要新增透過應用程式寫入檔案的功能,請使用 StreamWriter 類別。 StreamWriter 是專為以特定的編碼方式輸出字元而量身打造,而Stream 類別則是針對位元組輸入和輸出而設計。 使用 StreamWriter 將資訊行寫入標準文字檔案。 如需 StreamWriter 類別的詳細資訊,請參閱 StreamWriter。
若要新增寫入功能
從 [檢視] 功能表上,選擇 [程式碼] 以開啟程式碼編輯器。
由於應用程式會參考 System.IO 命名空間,因此請在表單類別宣告開始之前 (其會開始
Public Class Form1
),於程式碼開頭加入下列陳述式。Imports System.IO
在寫入檔案之前,您必須建立 StreamWriter 類別的執行個體。
從 [檢視] 功能表上,選擇 [設計工具] 以返回 Windows Forms 設計工具。 按兩下
Submit
按鈕,建立該按鈕的 Click 事件處理常式,然後加入下列程式碼。Dim fw As StreamWriter
注意
Visual Studio 整合式開發環境 (IDE) 會返回程式碼編輯器,並在事件處理常式中放入您應該新增程式碼的位置插入點。
若要寫入檔案,請使用 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
您可在
Dim ReadString As String
正後方加入下列程式碼,確定使用者無法提交空白項目。If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then Entry.Text = "Please enter something." Return End If
由於此為日記,因此使用者會需要針對每個項目指派日期。 在
fw = New StreamWriter("C:\MyDiary.txt", True)
之後插入下列程式碼,以將Today
變數設為目前的日期。Dim Today As DateTime Today = Now fw.Write(CStr(Today)) fw.Write(ControlChars.CrLf)
最後,附加程式碼來清除 TextBox。 將下列程式碼加入
Clear
按鈕的 Click 事件。Entry.Text = ""
新增日記的顯示功能
在本節中,您會新增功能以顯示 DisplayEntry
TextBox 中的最新項目。 您也可以新增 ComboBox 以顯示各種項目,使用者可以從中選取要在 DisplayEntry
TextBox 中顯示的項目。 StreamReader 類別的執行個體會讀取 MyDiary.txt
。 像 StreamWriter 類別一樣,StreamReader 適用於文字檔案。
在本節逐步解說中,請將下表的控制項新增至表單,並設定其屬性的對應值。
控制 | 屬性 | 值 |
---|---|---|
TextBox | 名稱 Visible 大小 多行 |
DisplayEntry False 120,60 True |
Button | 名稱 Text |
Display 顯示 |
Button | 名稱 Text |
GetEntries 取得項目 |
ComboBox | 名稱 Text 已啟用 |
PickEntries 選取項目 False |
若要填入下拉式方塊
系統會使用
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
若要測試您的程式碼,請按 F5 以編譯應用程式,然後按一下 [取得項目]。 在 ComboBox 中按一下下拉式箭號以顯示項目日期。
若要選擇並顯示個別項目
為
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
若要測試您的程式碼,請按 F5 以編譯應用程式,然後提交項目。 按一下 [取得項目],從 ComboBox 選取項目,然後按一下 [顯示]。 選取項目的內容會出現在
DisplayEntry
TextBox 中。
讓使用者可以刪除或修改項目
最後,您可以包含其他功能,讓使用者可以利用 DeleteEntry
和 EditEntry
按鈕,刪除或修改項目。 未顯示項目時,這兩個按鈕皆為停用狀態。
將下表的控制項新增至表單,並設定其屬性的對應值。
控制 | 屬性 | 值 |
---|---|---|
Button | 名稱 Text 已啟用 |
DeleteEntry 刪除項目 False |
Button | 名稱 Text 已啟用 |
EditEntry 編輯項目 False |
Button | 名稱 Text 已啟用 |
SubmitEdit 提交編輯 False |
若要啟用項目的刪除和修改功能
將下列程式碼加入
Display
按鈕的 Click 事件,放在DisplayEntry.Text = ReadString
之後。DeleteEntry.enabled = True
為
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
當使用者顯示項目時,
EditEntry
按鈕即變成啟用。 將下列程式碼加入Display
按鈕的 Click 事件,放在DisplayEntry.Text = ReadString
之後。EditEntry.Enabled = True
為
EditEntry
按鈕建立 Click 事件處理常式,並加入下列程式碼。Entry.Text = DisplayEntry.Text SubmitEdit.Enabled = True
為
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
以確認刪除。