演练:使用 .NET Framework 方法操作文件 (Visual Basic)
此演练演示了如何使用 StreamReader 类打开和读取文件,如何查看文件是否正被访问,如何在使用 StreamReader 类实例读取的文件中搜索字符串,以及如何使用 StreamWriter 类写入文件。
注意
以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。 有关详细信息,请参阅个性化设置 IDE。
创建应用程序
启动 Visual Studio,并创建一个用户可用于写入指定文件的窗体来开始项目。
创建项目
在“文件”菜单中,选择“新建项目”。
在“新建项目”窗格中,单击“Windows 应用程序”。
在“名称”框中,键入
MyDiary
,然后单击“确定”。Visual Studio 将项目添加到“解决方案资源管理器”中,“Windows 窗体设计器”随即打开。
将下表中的控件添加到窗体中,并为其属性设置相应的值。
对象 | 属性 | 值 |
---|---|---|
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 窗体设计器”。 双击
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 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
按钮来删除或修改项。 除非显示有项,否则这两个按钮都保持禁用状态。
将下表中的控件添加到窗体中,并为其属性设置相应的值。
控制 | 属性 | 值 |
---|---|---|
Button | 名称 Text Enabled |
DeleteEntry 删除项 False |
Button | 名称 Text Enabled |
EditEntry 编辑条目 False |
Button | 名称 Text Enabled |
SubmitEdit 提交编辑 False |
允许删除和修改项
在
DisplayEntry.Text = ReadString
之后,将以下代码添加到Display
按钮的 Click 事件。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
按钮将变为启用状态。 在DisplayEntry.Text = ReadString
之后,将以下代码添加到Display
按钮的 Click 事件。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
,以确认该项已删除。