演练:使用 .NET Framework 方法操作文件
更新:2007 年 11 月
此演练演示了如何使用 StreamReader 类打开和读取文件、如何查看文件是否正被访问、如何在使用 StreamReader 类实例读取的文件中搜索字符串以及如何使用 StreamWriter 类写入文件。
说明: |
---|
对话框中的可用选项以及显示的菜单命令的名称和位置可能会与“帮助”中的描述不同,具体取决于您的当前设置或版本。此帮助页是根据“常规开发设置”而编写的。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。 |
创建应用程序
启动 Visual Studio,并创建一个用户可用于写入指定文件的窗体来开始项目。
创建项目
在“文件”菜单上选择“新建项目”。
在“新建项目”窗格中单击“Windows 应用程序”。
在“名称”框中,键入 MyDiary,然后单击“确定”。
Visual Studio 就会将该项目添加到解决方案资源管理器中,“Windows 窗体设计器”也将随即打开。
将下表中的控件添加到窗体中,并给其属性设置相应的值。
对象
属性
值
Name
Text
Submit
提交项
Name
Text
Clear
清除项
Name
Text
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 = ""
将显示功能添加到日记
在本节中,将添加一项功能,用于显示 DisplayEntryTextBox 中的最新项。也可以添加一个 ComboBox 用于显示各项,并且用户可以从中选择要在 DisplayEntryTextBox 内显示的项。StreamReader 类的实例从 MyDiary.txt 进行读取。与 StreamWriter 类一样,StreamReader 也用于处理文本文件。
在此演练的这一节中,请将下表中的控件添加到窗体上,并将其属性设置为相应的值。
控件 |
属性 (Property) |
值 |
---|---|---|
Name Visible Size Multiline |
DisplayEntry False 120,60 True |
|
Name Text |
Display 显示 |
|
Name Text |
GetEntries 获取项 |
|
Name Text Enabled |
PickEntries 选择一项 False |
填充组合框
PickEntriesComboBox 用于显示用户提交每一项的日期,这样,用户就可以选择特定日期的项。为 GetEntries 按钮创建一个 Click 事件处理程序,然后添加以下代码。
Dim fr As StreamReader 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 中选择一项,然后单击“显示”。所选项的内容将出现在 DisplayEntryTextBox 中。
允许用户删除或修改项
最后,您可以包括其他功能,以允许用户使用 DeleteEntry 和 EditEntry 按钮来删除或修改项。除非显示有项,否则这两个按钮都保持禁用状态。
将下表中的控件添加到窗体中,并给其属性设置相应的值。
控件 |
属性 (Property) |
值 |
---|---|---|
Name Text Enabled |
DeleteEntry 删除项 False |
|
Name Text Enabled |
EditEntry 编辑项 False |
|
Name Text 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 键编译该应用程序。单击“获取项”,选择一项,然后单击“显示”。该项显示在 DisplayEntryTextBox 中。单击“编辑项”。该项显示在 EntryTextBox 中。编辑 EntryTextBox 中的项,然后单击“提交编辑”。打开 MyDiary.txt 文件以确认您所做的更正。现在,选择一项,然后单击“删除项”。当 MessageBox 请求确认时,单击“确定”。关闭该应用程序,然后打开 MyDiary.txt,以确认该项是否已删除。