1、Comment 彪彪1: 当所要读写的文件不是文本文件的时候必须采取这种类来执行相应的操作。Comment 彪彪2: 在使用文件操作的类 FileStream时,或者其他文件读写的类时,要先在命名空间中声名。Comment 彪彪3: 先声名一个字节数组和一个字符数组,在后面可以转换。Comment 彪彪4: 将 FileStream类实例化。Afile 是其对象。FileStream 对象化时有两个参数。Comment 彪彪5: 文件路径。Comment 彪彪6: 指定操作系统打开文件的方式。Comment 彪彪7: 从文件的具体位置开始读取,Seek 后有两个参数,一个是位置,另一个是开始搜
2、寻位置-参考点,一般 SeekOrigin.Begin表示从表头开始。Comment 彪彪8: 将 Seek设置位置后的多少位读入到 bydate中,并从第一个位置【0】开始存储。Comment 彪彪9: 文件操作一次完毕后一定要关闭。Comment 彪彪10: d是 Decoder类的对象,用于转换。Comment 彪彪11: 提取字节数组,转化为字符数组。C#数据的读写操作读取数据使用 FileStream类读取数据不像使用 StreamReader类读取数据那样容易。原因:FileStream 类只能处理原始字节,从而可以读取任何数据文件,而不仅仅是文本文件。通过读取字节数据,该类可以用
3、于读取图像和声音的文件。灵活性的代价:不能使用FileStream类将数据将数据直接读入字符串,而 StreamReader类却可以这样处理。有几种转换类可以很容易的实现从字节数组和字符数组间的转换。例如 SystemText名称空间的 Decoder类。下面具体以一个实例介绍using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace ConsoleApplication1class Programstatic void Main(stri
4、ng args)byte bydate = new byte20000;char chardate = new char20000;tryFileStream afile = new FileStream(“C:/tempuploads/Tell Me Why -Declan Galbraith.mp3“, FileMode.Open);afile.Seek(113, SeekOrigin.Begin);afile.Read(bydate, 0, 20000);catch(IOException e)Console.WriteLine(“An IO exeption has been thro
5、wn !“);Console.WriteLine(e.ToString();Console.ReadKey();return;Decoder d = Encoding.UTF8.GetDecoder();d.GetChars(bydate,0,bydate.Length,chardate,0);Console.WriteLine(chardate);Console.ReadKey();Comment 彪彪12: 先声名一个字节数组和一个字符数组,在后面可以转换。Comment 彪彪13: 将一个字符串转换为一个字符数组。Comment 彪彪14: 注意有五个参数。Comment 彪彪15: 用
6、 Encoder对象将字符数组转换为字节数组,并写入。Comment 彪彪16: 定位,并将从指定位置接受输入进来的字节。写入数据写入数据的过程与读取数据的过程类似。最简单的办法是先构建一个字符数组,然后将文件写入到该数组中,再利用 Encoder对象转换为字节数组,最后调用 Write()方法,将字节数组传送到文件中。下面将以具体实例加以说明using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace ConsoleApplication1
7、class Programstatic void Main(string args)byte bydate;char chardate;tryFileStream afile = new FileStream(“C:/tempuploads/newfile.txt“, FileMode.Create);chardate =”afdasdfasfsdfhiualfnaifhdsf ”.ToCharArray();bydate = new bytechardate.Length;Encoder e = Encoding.UTF8.GetEncoder();e.GetBytes(chardate,0
8、,chardate.Length,bydate,0,true);afile.Seek(0,SeekOrigin.Begin);afile.Write(bydate,0,bydate.Length);catch(IOException ex)Console.WriteLine(“An IO exeption has been thrown !“);Console.WriteLine(ex.ToString();Console.ReadKey();return;Comment 彪彪17: 一定要注意这两种方法。Comment 彪彪18: 规定是追加文件,还是创建新文件。Comment 彪彪19:
9、取当前时间和日期。Comment 彪彪20: 将日期和时间转换成易读取的字符格式。Comment 彪彪21: 结合这个例子可以看见两者的区别:WriteLine()执行完后会回车换行。Comment 彪彪22: 该声明也是必须的。StreamWriter对象StreamWriter类允许将字符和字符串写入到文件中,它处理底层的转换,向 FileStream对象写入数据。如果已经有了 FileStream对象,则可以使用此对象来创建 StreamWriter对象:FileStream afile = new FileStream(“C:/tempuploads/newfile.txt“, Fil
10、eMode.CreateNew);StreamWriter sw = new StreamWriter(afile);也可以直接从文件中创建 StreamWriter对象:StreamWriter sw = new StreamWriter(“C:/tempuploads/newfile.txt“,true);该构造函数的参数是文件名和一个 Boolean值。该值有 true和 false两个:True:打开文件保留原来的数据,如果找不到文件,则创建一个新文件;False:创建一个新文件,或者截取现有文件并打开它。StreamWriter有两个重要的方法: Write()和 WriteLine
11、() ,这两种方法的区别是前者直接追加,后者是追加完成后有换行符,例如:sw.WriteLine(“hello to you”);sw.Write(“it is now 0 and things are looking good ”,DateTime.Now.ToLongDateString();sw.Write(“田宗彪”);sw .Close();该代码的执行结果就是在制定的文件中显示如下内容:Hello to youit is now Friday oct 08 2010 and things are looking good 田宗彪StreamReader对象StreamReader对
12、象的创建方式非常类似于 StreamWriter,也有两种方式:如果已经有了 FileStream对象,则可以使用此对象来创建 StreamWriter对象:FileStream afile = new FileStream(“C:/tempuploads/newfile.txt“, FileMode.CreateNew);StreamReader sr = new StreamReader(afile);也可以直接从文件中创建 StreamWriter对象:StreamReader sr = new StreamReader(“C:/tempuploads/newfile.txt“,true
13、);实例:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace ConsoleApplication2class Programstatic void Main(string args)Comment 彪彪23: 声明一个字符串变量,用以读取文件内容。Comment 彪彪24: StreamReader对象的一种创建方式。Comment 彪彪25: 用这个循环来读取文件的所有行,一定要注意,否则只会读取文件的首行。Comment 彪彪
14、26: Read()方法将字符作为正整数返回,故在此要用到Convert实用类转换为字符。Comment 彪彪27: 任然要用到循环。string strline;tryFileStream afile = new FileStream(“C:/tempuploads/newfile.txt“,FileMode.Open);StreamReader sr = new StreamReader(afile);strline = sr.ReadLine();while (strline != null)Console.WriteLine(strline);strline = sr.ReadLine
15、();sr.Close();catch(IOException e)Console.WriteLine(“An IO exeption has been thrown !“);Console.WriteLine(e.ToString();return;Console.ReadKey();当然,还可以用 StreamReader类中的 Read()函数来对文件读取,此方法将流的下一个字符作为正整数值返回,如果到达了流的结尾处,则返回-1,上例中程序的主题可以改作:FileStream afile = new FileStream(“C:/tempuploads/newfile.txt“,File
16、Mode.Openint nchar;nchar = sr.Read();while (nchar != -1)Console.Write(Convert.ToChar(nchar);nchar = sr.Read();sr.Close();下面是 StreamReader和 StreamWriter综合利用的实例:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace ConsoleApplication2class Programs
17、tatic void Main(string args)char newdate = new char20000;int i = 0;tryFileStream afile = new FileStream(“C:/tempuploads/newfile.txt“,FileMode.Open);StreamReader sr = new StreamReader(afile);FileStream bfile = new FileStream(“C:/tempuploads/newfile1.txt“, FileMode.Create);StreamWriter sw = new Stream
18、Writer(bfile);int nchar;nchar = sr.Read();while (nchar != -1)Console.Write(Convert.ToChar(nchar);newdatei = Convert.ToChar(nchar);i+;nchar = sr.Read();sw.Write(newdate);sr.Close();catch(IOException e)Console.WriteLine(“An IO exeption has been thrown !“);Console.WriteLine(e.ToString();return;Console.ReadKey();