本演练演示如何使用 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 = ""
向日记中添加显示功能
在本部分中,您将添加一个功能,用于显示DisplayEntryTextBox中的最新条目。 您还可以添加一个 ComboBox,用于显示各种条目,并允许用户选择一个条目在 DisplayEntryTextBox 中显示。
StreamReader 类的实例从 MyDiary.txt 中读取。 与类 StreamWriter 一样, StreamReader 适用于文本文件。
对于本演练的此部分,请将下表中的控件添加到窗体中,并为其属性设置相应的值。
| 控制 | 性能 | 价值观 |
|---|---|---|
| TextBox |
名称 可见 大小 多行 |
DisplayEntryFalse120,60True |
| Button |
名称 文字 |
Display显示 |
| Button |
名称 文字 |
GetEntries获取条目 |
| ComboBox |
名称 文字 已启用 |
PickEntries选择一个条目 False |
填充组合框
用于
PickEntriesComboBox 显示用户提交每个条目的日期,以便用户可以从特定日期中选择一个条目。 创建 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一个条目,然后单击“ 显示”。 所选条目的内容显示在
DisplayEntryTextBox中。
允许用户删除或修改条目
最后,可以包含其他功能,使用户能够使用 DeleteEntry 和按钮删除或修改 EditEntry 条目。 除非显示有项,否则这两个按钮都保持禁用状态。
将下表中的控件添加到窗体中,并为其属性设置相应的值。
| 控制 | 性能 | 价值观 |
|---|---|---|
| Button |
名称 文字 已启用 |
DeleteEntry删除条目 False |
| Button |
名称 文字 已启用 |
EditEntry编辑条目 False |
| Button |
名称 文字 已启用 |
SubmitEdit提交修改 False |
允许对条目进行删除和修改
将以下代码添加到
Display按钮的 Click 事件中,在DisplayEntry.Text = ReadString之后。DeleteEntry.enabled = TrueClick为
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 = TrueClick为
EditEntry按钮创建事件处理程序并添加以下代码。Entry.Text = DisplayEntry.Text SubmitEdit.Enabled = TrueClick为
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 编译应用程序。 单击“ 获取条目”,选择一个条目,然后单击“ 显示”。 条目将出现在 DisplayEntryTextBox 中。 单击 “编辑条目”。 条目将出现在 EntryTextBox 中。 编辑条目, EntryTextBox 然后单击“ 提交编辑”。
MyDiary.txt打开该文件以确认更正。 现在选择一个条目,然后单击“ 删除条目”。 请求 MessageBox 确认时,单击“ 确定”。 关闭应用程序并打开 MyDiary.txt 以确认删除。