• 使用FileStream读写数据


        这节讲一下使用FileStream读写数据,这是一个比较基础的流。

        FileStream类只能处理原始字节,所以它可以处理任何类型的文件。

        先看一下它的构造方法:

    FileStream fs = new FileStream("./demo.txt", FileMode.Open, FileAccess.Read);

     这个方法最少有两个参数,也就是前两个,第一个是文件路径,第二个FileMode枚举,规定文件的打开方式,是正常打开还是创建等等,第三个是FileAccess枚举,规定流的访问形式,是写入还是读取等等,不指明这个参数,它的默认值是ReadWrite,也就是可读可写。

        FileMode枚举成员:

      

        FileAccess枚举成员:

         

       File和FileInfo类都提供了OpenRead()和OpenWrite()这两个方法,可以快速创建只读或者只写的FileStream对象。

        读写文件:

       读取文件,需要用到Read()和Write(),这两个方法最常用的重载如下所示:

    len=fs.Read(buffer, 0, buffer.Length)
    write.Write(buffer, 0, len)

        buffer是一个字节数组,用于存放一次读取的字节,可以自定义大小;第二个参数是偏移量,指示从buffer的第几个索引开始读,一般都是0,从开始读取;第三个参数是一次读取的大小,这个一般也都是固定的,是数组的长度。Read()方法的返回值是本次读取实际读取    的长度,因为存在最后一次读取的长度不满buffer的长度的情况,Write()方法,第三个参数是指定写入的长度,这里一般指定Read()方法的返回值,这样就不会出现将多余的无关数据写入文件中。

        下面看一下例子:

    //读取数据并展示
    FileStream fs = new FileStream("./demo.txt", FileMode.Open, FileAccess.Read);
    int len, i = 0;
    //存放每次读取的数据
    byte[] buffer = new byte[5];
    //存放所有读到的数据,最后将其转换为字符串
    byte[] data = new byte[fs.Length];
    //循环读取文件
    while ((len = fs.Read(buffer, 0, buffer.Length)) != 0)
    {
        for (int j = 0; j < len; j++)
        {
            data[i++] = buffer[j];
        }
    }
    //jiang
    Console.WriteLine(Encoding.UTF8.GetChars(data));
    ​
    //数据写入
    FileStream write = new FileStream("./demo_copy.txt", FileMode.Create, FileAccess.Write);
    ​
    //重置指针
    fs.Seek(0, SeekOrigin.Begin);
    while ((len = fs.Read(buffer, 0, buffer.Length)) != 0)
    {
        write.Write(buffer, 0, len);
    }
    ​
    fs.Dispose();
    write.Dispose();

      第23行用到了一个方法Seek(),这个是用来设置当前文件指针的位置的,一般情况下,文件读到哪指针就指到哪,而通过这个方法,可以重新设置指针的位置,它的第一个参数是偏移量,为正数则向后移动,为负数则向前移动,第二个参数是SeekOrigin枚举,它有三个成员,Begin,End,Current,分别指示文件的开始,结束和当前位置,偏移量根据这个枚举值进行移动。

        另外,操作结束后要及时释放资源,或者一开始使用using引用要释放的对象。

    这是我的公众号二维码,获取最新文章,请关注此号

  • 相关阅读:
    把word文档转换成swf格式
    利用“审阅”批改作业
    注意:QQ空间加密并不安全
    MySQLDB 错误 InterfaceError(0,")
    Linux 文件大小 文件夹大小 磁盘大小
    JavaArrays类fill()方法详解
    构造函数
    ASP部署错误"未能加载类型..."
    试AJAX出错两则
    ASP.Net如何区分开发状态与实际应用状态
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/13603528.html
Copyright © 2020-2023  润新知