1、FileStream文件流的概念:
FileStream 类对文件系统上的文件进行读取、写入、打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。读写操作可以指定为同步或异步操作。FileStream 对输入输出进行缓冲,从而提高性能。——MSDN
简单点说:FileStream类可以对任意类型的文件进行读取操作,而且我们也可以根据自己需要来指定每一次读取字节长度,以此减少内存的消耗,提高读取效率。
2、File和FileStream的区别
直观点:File是一个静态类;FileStream是一个非静态类。
File:是一个文件的类,对文件进行操作。其内部封装了对文件的各种操作(MSDN:提供用于创建、复制、删除、移动和打开单一文件的静态方法,并协助创建FileStream对象)。
FileStream:文件流的类。对txt,xml,avi等文件进行内容写入、读取、复制...时候需要使用的一个工具。
打个形象的比喻。File是笔记本,需要Filestream的这个笔才能写.
换而言之,记事本是一个文件,可以用File操作,里面的内容需要用FileStream来操作。
注:FileStream是对字节操作的(任何文件)。
3、使用FileStream读取数据、使用using帮我们结束后自动释放资源不用写Close()和Dispose()方法。
/// <summary> /// 使用FileStream读取文件 /// </summary> /// <param name="path">要读取的文件路径</param> /// <param name="str"></param> public static string FileStreamRead(string path) { using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read)) { byte[] buffer = new byte[1024*1024*5];//每次读取5M长度 int r= fsRead.Read(buffer, 0, buffer.Length);//返回本次实际读取到的有效字节数 string str = Encoding.UTF8.GetString(buffer, 0, r);//使用utf-8编码格式 return str; } }
4、使用FileStream写入数据
1 /// <summary> 2 /// 使用FileStream写入数据 3 /// </summary> 4 /// <param name="path">要写入文件的路径</param> 5 /// <param name="str">要写入的字符串</param> 6 public static void FileStreamWrite(string path,string str) 7 { 8 using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)) 9 { 10 byte[] buffer = Encoding.UTF8.GetBytes(str); 11 //使用utf-8编码格式 12 fsWrite.Write(buffer, 0, buffer.Length); 13 } 14 15 }
无论是读还是写,都要借助一个缓冲区buffer来存取字节。
注意:在写入和读取时,字符编码格式要相同,不然会出现乱码。
Encoding.UTF8.GetBytes(str);
Encoding.UTF8.GetString(b, 0, r);