逐步解說:使用 .NET Framework 方法管理檔案 (Visual Basic)
本逐步解說會示範如何使用 StreamReader 類別開啟及讀取檔案、檢查是否正在存取該檔案、搜尋使用 StreamReader 類別之執行個體讀取的檔案內字串,以及使用 StreamWriter 類別寫入檔案。
注意事項 |
---|
您的電腦對於下列指示中某些 Visual Studio 使用者介面項目的名稱或位置,可能會顯示不同的資訊:您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱<Visual Studio 中的自訂開發設定>。 |
建立應用程式
啟動 Visual Studio,並且藉由建立使用者可用於寫入至指定之檔案的表單,以便開始專案。
若要建立專案
在 [檔案] 功能表上選取 [新增專案]。
在 [新增專案] 窗格中,按一下 [Windows 應用程式]。
在 [名稱] 方塊中輸入 MyDiary,再按一下 [確定]。
Visual Studio 會將專案加入 [方案總管] 中,並開啟 [Windows Form 設計工具]。
將下表中的控制項加入至表單,並且設定相對應的屬性值。
物件 |
屬性 |
值 |
名稱 文字 |
Submit 送出項目 |
|
名稱 文字 |
Clear 清除項目 |
|
名稱 文字 Multiline |
Entry 請輸入 False |
寫入至檔案
若要加入透過應用程式寫入檔案的能力,請使用 StreamWriter 類別。 StreamWriter 是為特定編碼方式的字元輸出而設計,而 Stream 類別則是為位元組輸入和輸出而設計。 使用 StreamWriter 將資訊行寫入至標準文字檔。 如需 StreamWriter 類別的詳細資訊,請參閱 StreamWriter。
若要加入寫入功能
從 [檢視] 功能表,選擇 [程式碼] 以開啟 [程式碼編輯器]。
因為應用程式會參考 System.IO 命名空間,所以請將下列陳述式加在程式碼的起始處 (需在以 Public Class Form1 開頭的表單類別宣告之前)。
Imports System Imports System.IO
在寫入檔案之前,您必須建立 StreamWriter 類別的執行個體。
從 [檢視] 功能表,選擇 [設計工具] 以返回 [Windows Form 設計工具]。 按兩下 [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 主要用於文字檔。
針對本逐步解說章節,將下表中的控制項加入至表單,並且設定相對應的屬性 (Property) 值。
控制項 |
屬性 |
值 |
---|---|---|
名稱 Visible Size Multiline |
DisplayEntry False 120,60 True |
|
名稱 文字 |
Display Display |
|
名稱 文字 |
GetEntries 取得項目 |
|
名稱 文字 Enabled |
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 按鈕,刪除或修改項目。 這兩個按鈕在項目顯示之前會維持在停用狀態。
將下表中的控制項加入至表單,並且設定相對應的屬性值。
控制項 |
屬性 |
值 |
---|---|---|
名稱 文字 Enabled |
DeleteEntry 刪除項目 False |
|
名稱 文字 Enabled |
EditEntry 編輯項目 False |
|
名稱 文字 Enabled |
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 以確認刪除。