• 文件流FileStream的读写


    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);
  • 相关阅读:
    monaco editor
    javascript for of 和 for in 在数组和对象中的区别
    django rest 版本控制器
    学习
    day 22
    day 21
    day20
    day21 数据处理自我小结
    day20 【手写数字识别】之数据处理(搬运)
    day19 通过极简方案快速构建手写数字识别模型 (百度飞浆搬运)
  • 原文地址:https://www.cnblogs.com/hudean/p/11716818.html
Copyright © 2020-2023  润新知