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);

 

posted on 2019-10-21 22:36  青春似雨后霓虹  阅读(8714)  评论(0编辑  收藏  举报