第一个文件读写的例子

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

首先,我们打开VS2013,新建一个窗体应用程序如图:

需求:我们要实现这样的功能,点击文本框,然后弹出文件对话框,让我们选择文件,然后点击确定之后,读取指定文件的内容,随后我们将读取到的数据,写入文本中。

文件读写原理:前面,我们在学习文件读写原理的时候,已经知道,硬盘的数据和内存之间的关系,在磁盘中,我们将数据读取成二进制的数据,存放到byte数组中,然后在内存中,我们需要将byte数组转化为原始的文本数据。

然后看下截图的代码:

我们通过OpenFileDialog类,来创建一个对话框。通过其实例对象的ShowDialog方法,来显示对话框,这个方法的返回值是DialogResult类型。图中的代码意思是:当我们打开对话框,点击确定之后,显示所选的文件的全路径。

代码这样写,通过filenames也可以达到一样的效果:看图:

现在我们已经达到了这样的效果,显示了文件的路径,然后现在我们要点击读取按钮,把所选的文件文件,数据读取到另一个文件中。

我们测试的文本是:

可以看到这个文本是293个字节:(在代码中,我们创建数组的时候,怎么知道创建的多大的呢??)

这里有个技巧:

先读取传过来的文本的路径,在文件流中的length属性就标志了,我们需要读取的文件的大小。我们就可以知道要创建的数组的大小了。

所有的代码:

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.IO;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceFileReadDemo

{publicpartialclassForm1 : Form

{publicForm1()

{

InitializeComponent();

}PRivatevoidtxtPath_Click(objectsender, EventArgs e)

{//文件打开对话框OpenFileDialog openDialog =newOpenFileDialog();//显示对话框的方法。返回值是DialogResult类型//openDialog.ShowDialog();if(openDialog.ShowDialog() ==DialogResult.OK)

{

txtPath.Text= openDialog.FileName;//获取全路径}

}privatevoidbtnRead_Click(objectsender, EventArgs e)

{//1.读取文件的话,我们需要使用文件的读写类,这里使用FileStream类,引用命令空间System.IO.//读文件,模式选择OpenFileStream fileRead =newFileStream(txtPath.Text, FileMode.Open);//创建byte类型的数组(注意这个时候,有个疑问了,数组大小应该创建多大的呢?)byte[] fileByte =newbyte[fileRead.Length];//2.将文件中所指定的数据读取到数组中fileRead.Read(fileByte, 0, fileByte.Length);//现在已经按照文件读写原理,把磁盘的数据转为二进制,存到数组了,现在需要写入到文件中//但FileStream类只能做一件事,要么读文件,要么写文件。解决方法,我们可以再创建一个FileStream//备注;这里先不管,文件流的释放的问题了。测试阶段,后面会优化。//这里为测试方便,就选择把读取的文件,读到D盘aaa.txt文件中。//写文件,模式选择CreateFileStream fileWrite =newFileStream(@"D:\aaa.txt", FileMode.Create);//然后就是写入文件中了fileWrite.Write(fileByte, 0, fileByte.Length);//测试代码,完毕之后,显示OKMessageBox.Show("OK");

}

}

}

注意;这个例子需要执行成功之后,需要将程序停止,才可以看到文件文件中读取到的数据,FileStream的缓存作用。。

下面来优化一下代码:

上面的代码,只能执行一次,因为文件流没有被释放:

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.IO;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceFileReadDemo

{publicpartialclassForm1 : Form

{publicForm1()

{

InitializeComponent();

}privatevoidtxtPath_Click(objectsender, EventArgs e)

{//文件打开对话框OpenFileDialog openDialog =newOpenFileDialog();//显示对话框的方法。返回值是DialogResult类型//openDialog.ShowDialog();if(openDialog.ShowDialog() ==DialogResult.OK)

{

txtPath.Text= openDialog.FileName;//获取全路径}

}privatevoidbtnRead_Click(objectsender, EventArgs e)

{//1.读取文件的话,我们需要使用文件的读写类,这里使用FileStream类,引用命令空间System.IO.//读文件,模式选择Openusing(FileStream fileRead =newFileStream(txtPath.Text, FileMode.Open))

{//创建byte类型的数组(注意这个时候,有个疑问了,数组大小应该创建多大的呢?)byte[] fileByte =newbyte[fileRead.Length];//2.将文件中所指定的数据读取到数组中fileRead.Read(fileByte,0, fileByte.Length);//现在已经按照文件读写原理,把磁盘的数据转为二进制,存到数组了,现在需要写入到文件中//但FileStream类只能做一件事,要么读文件,要么写文件。解决方法,我们可以再创建一个FileStream//备注;这里先不管,文件流的释放的问题了。测试阶段,后面会优化。//这里为测试方便,就选择把读取的文件,读到D盘aaa.txt文件中。//写文件,模式选择Createusing (FileStream fileWrite = new FileStream(@"D:\aaa.txt", FileMode.Create))

{//然后就是写入文件中了fileWrite.Write(fileByte,0, fileByte.Length);//测试代码,完毕之后,显示OKMessageBox.Show("OK");}}}}

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航