2011-03-29 18:51:39|?次阅读|上传:wustguangh【已有?条评论】发表评论
FileStream对象表示在磁盘或者网络路径上指向的文件流,这个类提供了在文件中读写字节的方法,但经常使用StreamReader或者StreamWriter类执行这些功能。FileStream类操作的是字节和字节数组,Stream类操作的是字符数据。字符数据易于使用,但是有些操作,如随机文件访问,就必须由FileStream对象执行。
使用FileStream时头文件需要增加IO引用相关的语句,下面是一个使用了FileStream类的文件头:
using System; using System.Collections.Generic; using System.Text; using System.IO;
FileStream.Read()方法是从FileStream对象所指向的文件中访问数据的主要手段。这个方法从文件中读取数据,再把数据写入一个字节数组。它有三个参数:第一个参数是传入的字节数组,用来接收FileStream对象中的数据;第二个参数是字节数组中开始写入数据的位置:它通常是0,表示从数组开端向文件中写入数据;最后一个参数指定从文件中读出多少字节。
下面的示例演示从随机访问文件中读取数据:
public void fileRead(string filePath) { byte[] byData = new byte[200]; char[] charData = new Char[200]; try { FileStream aFile = new FileStream("../../Program.cs", FileMode.Open); aFile.Seek(113, SeekOrigin.Begin); aFile.Read(byData, 0, 200); } catch (IOException e) { Console.WriteLine("An IO exception has been thrown!"); Console.WriteLine(e.ToString()); Console.ReadKey(); return; } Decoder d = Encoding.UTF8.GetDecoder(); d.GetChars(byData, 0, byData.Length, charData, 0); Console.WriteLine(charData); Console.ReadKey(); }
使用FileStream类读取数据没有使用StreamReader类读取数据容易,因为FileStream类只能处理原始字节,处理原始字节的功能使FileStream类可以用于任何数据文件,而不仅仅是文本文件。通过读取字节数据,FileStream对象可以用于读取诸如图像和声音的文件。这种灵活性的代价是,不能使用FileStream类将数据直接读入字符串,而使用StreamReader类却可以这样处理。
向随机访问文件中写入数据的过程与从中读取数据非常类似。首先需要创建一个字节数组:最简单的办法是首先构建要写入文件中的字符数组;然后使用Encoder对象将其转换为字节数组,其用法非常类似于Decoder对象;最后调用Write()方法,将字节数组传送到文件中。
下面构建一个简单的示例演示其过程:
public void fileWrite(string filePath) { byte[] byData; char[] charData; try { FileStream aFile = new FileStream("Temp.txt", FileMode.Create); charData = "My pink half of the drainpipe.".ToCharArray(); byData = new byte[charData.Length]; Encoder e = Encoding.UTF8.GetEncoder(); e.GetBytes(charData, 0, charData.Length, byData, 0, true); // Move file pointer to beginning of file. aFile.Seek(0, SeekOrigin.Begin); aFile.Write(byData, 0, byData.Length); } catch (IOException ex) { Console.WriteLine("An IO exception has been thrown!"); Console.WriteLine(ex.ToString()); Console.ReadKey(); return; } }