文章正文

学习FileStream文件流操作,使用缓存区读写

加入时间:2017/9/8 11:50:16

注释说的很明白了,需要注意几点,我在尝试的时候都遇到的错误问题。

1、不要把打开关闭文件的操作放进循环,非常非常影响性能。

2、缓存区的设置位置一定要注意。也不能说是位置,重要的是缓存区在循环时的大小,以及缓存区是不是干净,有没有脏数据。设置的不恰当,会导致数据不是你想要的。

//str记录要写入的字符串
        string str = "hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh1231————hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh123123hh1231————";
        //用打开或创建文件的方式创建对1.txt的访问流文件
        FileStream fs1 = new FileStream(Server.MapPath("/1.txt"), FileMode.OpenOrCreate);
        //从字符串读取1024个字符数据
        var tmpByte = Encoding.UTF8.GetBytes(str);
        //l用来记录已经读取的数据长度
        //fl用来记录上次打开时文件的长度
        long l = 0,fl=fs1.Length;
        while (l < tmpByte.Length)
        {
            //设置缓存区大小
            long buffer = 1024;
            //设置buffer大小
            buffer = tmpByte.Length - l > buffer ? buffer : tmpByte.Length - l;
            //b1 一个缓存区
            byte[] b1 = new byte[buffer];
            for (int i=0; i< buffer; i++)
            {
                b1[i] = tmpByte[l + i];
            }
            WriteStreamToFile(fs1,b1, out l);
            //上面一句out 让l变成了文件最终的指针位置,下面减去上次文件长度,修正为已经读取的数据长度
            l = l - fl;
        }
        //关闭文交流
        fs1.Close();
        //到此位置分段写入文件例子完毕,下面开始读取文件并输出到页面
        FileStream fs = new FileStream(Server.MapPath("/1.txt"), FileMode.OpenOrCreate);
        //这里采用分段缓存的方式读取文件
        while (fs.Position < fs.Length)
        {
            //设置读取缓存区这里设置为1024byte
            var b2 = new byte[1024];
            //读取数据到缓存区
            int i = fs.Read(b2, 0,b2.Length);
            //输出缓存区内容
            Response.Write(Encoding.UTF8.GetString(b2)+"<br>");
        }
        fs.Close();

    private void WriteStreamToFile(FileStream fs,byte[] b1,out long pos)
    {
        //设置指针到文件尾部
        fs.Position = fs.Length;
        //写入1024个字符
        fs.Write(b1, 0, b1.Length);
        pos = fs.Position;
    }

参考资料:C#数据流的使用:http://www.cnblogs.com/fangyz/p/5122546.html

字体大小[ ]

版权所有:有信心——uxinxin 我的个人网站欢迎常来!手机版(新站开启,请多多关照) 豫ICP备12017930号-1
 豫公网安备 41910102000493号