本演练演示如何使用 StreamReader 类打开和读取文件、检查文件是否被访问、使用类实例 StreamReader 读取的文件内搜索字符串,以及使用该 StreamWriter 类写入文件。
注释
计算机可能会在以下说明中显示某些 Visual Studio 用户界面元素的不同名称或位置。 你拥有的 Visual Studio 版本以及所使用的设置决定了这些元素。 有关更多信息,请参阅 自定义 IDE。
创建应用程序
启动 Visual Studio,并通过创建一个表单来开始项目,用户可以使用该表单写入指定文件。
要创建项目
在“文件”菜单中,选择“新建项目”。
在“ 新建项目 ”窗格中,单击 “Windows 应用程序”。
在“ 名称 ”框中,键入
MyDiary
并单击“ 确定”。Visual Studio 将项目添加到 解决方案资源管理器,Windows 窗体设计器 随即打开。
将下表中的控件添加到窗体中,并为其属性设置相应的值。
对象 | 性能 | 价值 |
---|---|---|
Button |
名称 文字 |
Submit 提交条目 |
Button |
名称 文字 |
Clear 清除条目 |
TextBox |
名称 文字 多行 |
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)将返回到代码编辑器,并将插入点放置在应在其中添加代码的事件处理程序中。
若要写入该文件,请使用 Write 类的 StreamWriter 方法。 在
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 |
名称 可见 大小 多行 |
DisplayEntry False 120,60 True |
Button |
名称 文字 |
Display 显示 |
Button |
名称 文字 |
GetEntries 获取条目 |
ComboBox |
名称 文字 已启用 |
PickEntries 选择一个条目 False |
填充组合框
用于
PickEntries
ComboBox 显示用户提交每个条目的日期,以便用户可以从特定日期中选择一个条目。 创建 Click 按钮的GetEntries
事件处理程序,并添加以下代码。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 以显示输入日期。
选择并显示个别项
Click为
Display
按钮创建事件处理程序并添加以下代码。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 |
名称 文字 已启用 |
DeleteEntry 删除条目 False |
Button |
名称 文字 已启用 |
EditEntry 编辑条目 False |
Button |
名称 文字 已启用 |
SubmitEdit 提交修改 False |
允许对条目进行删除和修改
将以下代码添加到
Display
按钮的 Click 事件中,在DisplayEntry.Text = ReadString
之后。DeleteEntry.enabled = True
Click为
DeleteEntry
按钮创建事件处理程序并添加以下代码。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
按钮将启用。 在 Click 之后,将以下代码添加到Display
按钮的DisplayEntry.Text = ReadString
事件。EditEntry.Enabled = True
Click为
EditEntry
按钮创建事件处理程序并添加以下代码。Entry.Text = DisplayEntry.Text SubmitEdit.Enabled = True
Click为
SubmitEdit
按钮创建事件处理程序并添加以下代码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
以确认删除。