使用 FileStream 选件类读取,写入,打开和关闭的文件在文件系统和操作其他文件相关的操作系统句柄,包括管道铺设、标准输入和标准输出。可以使用 Read、Write、CopyTo和 Flush 方法执行同步操作或 ReadAsync、WriteAsync、CopyToAsync和 FlushAsync 方法执行异步操作。 使用异步方法执行大量资源文件操作,而不必阻止主线程。 此性能注意事项非常重要。Windows 应用商店 app 或耗时的流操作会阻止 UI 线程并将您的应用程序显示的 桌面 app,就象它不起作用。 缓冲输入和输出以获得更好的性能
例子
废话不说,开始操作。
1.拖好控件、必须滴,将除了要写文件的文本框外,其他的文本框的 ReadOnly 属性均设为 True !
2.开始"选择文件"操作
代码如下 | 复制代码 |
privatevoid btnReadChoose_Click(object sender, EventArgs e) { //创建 打开文件 对话框,可以直接拖控件哈。。 OpenFileDialog ofd=new OpenFileDialog(); //将文件路径显示在文本框 if (ofd.ShowDialog() == DialogResult.OK) { txtReadPath.Text = ofd.FileName; } } |
效果图。。。路径就显示出来了。
3.开始"读出"操作,并将文本内容显示在文本框.
其中先写出一个显示“温馨提示”消息的方法
代码如下 | 复制代码 |
#region 显示温馨提示的消息+void MsgShow(string Msg) ///<summary> /// 显示温馨提示的消息 ///</summary> ///<param name="Msg">消息</param> void MsgShow(string Msg) { lbResult.Text ="温馨提示:"+Msg; } #endregion |
读出操作
代码如下 | 复制代码 |
privatevoid btnReadFile_Click(object sender, EventArgs e) { //创建文件流、流操作要进行异常处理,并以using来释放对象 try { using (FileStream fs =new FileStream(txtReadPath.Text, FileMode.Open)) { //定义缓存区,3M 大小 byte[] arrFileData =newbyte[1024*1024*3]; //读文件 存在 arrFileData 中 fs.Read(arrFileData, 0, arrFileData.Length); //转 编码格式 以便显示在 文本框 txtReadMsg 中 string ChangeToString = Encoding.Default.GetString(arrFileData); txtReadMsg.Text = ChangeToString; MsgShow("文本读取成功!!!"); } } catch (Exception ex) { MessageBox.Show("异常:"+ ex.Message); } } |
4.开始"写入"操作,选择文件就不累赘了,差不多.
代码如下 | 复制代码 |
privatevoid btnWriteFile_Click(object sender, EventArgs e) { //获取要写入文本的数据 string strWriteData = txtWriteMsg.Text; try { using (FileStream fs =new FileStream(txtWritePath.Text, FileMode.Create)) { //转为二进制写入文本 byte[] arrWriteData = Encoding.Default.GetBytes(strWriteData); //fs.Write(数据缓存区,从第几个byte开始写,写多少个) MessageBox.Show("异常:"+ ex.Message); |
就这么滴,一个基于文件流FileStream的文本写入、读取小程序就完工了。主要是自己总结
总结
1)读写文件的五个步骤:创建文件流、创建读写器、读写文件、关闭读写器、关闭文件流。
(2)文件流的类是FileStream,创建一个文件流时,需要指定操作文本的路径、文件的打开方式和文件的访问方式。
(3)StreamWriter是一个写入器,StramReader是一个读取器。读写文本文件可以直接使用读写器,不用创建文件流,但是不容易控制文本的打开方式和访问方式
(4)File类用于对文件进行操作,如复制、移动、删除等,Directory类用于对文件夹操作,它们都是静态类。
(5)静态类只包含静态成员,非静态类可以包含静态成员;静态类不能包含实例成员,非静态类可以包含实例成员;静态类使用类名访问其成员,非静态类使用它的实例对象访问成员。
(6)FileInfo类与File类功能类似,也可以完成对文件的基本操作。不同的是File类不可以实例化对象。如果打算多次重用某个文件对象,可以优先考虑使用FileInfo类,因为并不总是需要安全检查
(7)DirectoryInfo类与Directory类功能类似,可以完成对文件夹的基本操作。如果打算多次重用某个目录对象,可以考虑使用DirectoryInfo类的实例方法