此演练演示了如何使用 StreamReader 类打开和读取文件、如何查看文件是否正被访问、如何在使用 StreamReader 类实例读取的文件中搜索字符串以及如何使用 StreamWriter 类写入文件。
提示
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置。
创建应用程序
启动 Visual Studio,并创建一个用户可用于写入指定文件的窗体来开始项目。
创建项目
在**“文件”菜单上选择“新建项目”**。
在**“新建项目”窗格中单击“Windows 应用程序”**。
在**“名称”框中,键入 MyDiary,然后单击“确定”**。
Visual Studio 就会将该项目添加到解决方案资源管理器中,**“Windows 窗体设计器”**也将随即打开。
将下表中的控件添加到窗体中,并给其属性设置相应的值。
对象 |
属性 |
值 |
Name 文本 |
提交 提交项 |
|
Name 文本 |
Clear 清除项 |
|
Name 文本 Multiline |
Entry 请输入一些文本。 False |
写入文件
若要通过应用程序添加写入文件的功能,请使用 StreamWriter 类。 StreamWriter 设计用于特定编码的字符输出,而 Stream 类设计用于字节的输入和输出。 使用 StreamWriter 可将多行信息写入标准的文本文件。 有关 StreamWriter 类的更多信息,请参见 StreamWriter。
添加写入功能
从**“视图”菜单中选择“代码”**,以打开代码编辑器。
由于该应用程序引用 System.IO 命名空间,因此请在代码的最开头处,在窗体的类声明(以 Public Class Form1 开始)之前,添加以下语句。
Imports System 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 也用于处理文本文件。
在此演练的这一节中,请将下表中的控件添加到窗体上,并将其属性设置为相应的值。
控件 |
属性 |
值 |
---|---|---|
Name Visible 大小 Multiline |
DisplayEntry False 120,60 True |
|
Name 文本 |
显示 显示 |
|
Name 文本 |
GetEntries 获取项 |
|
Name 文本 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 按钮来删除或修改项。 除非显示有项,否则这两个按钮都保持禁用状态。
将下表中的控件添加到窗体中,并给其属性设置相应的值。
控件 |
属性 |
值 |
---|---|---|
Name 文本 Enabled |
DeleteEntry 删除项 False |
|
Name 文本 Enabled |
EditEntry 编辑项 False |
|
Name 文本 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,以确认该项是否已删除。