C#谈文件操作NO2(大文件拷贝)

5 篇文章 0 订阅

上一篇介绍了文件的一些基本操作,介绍了文件的加密操作。这一篇介绍一些文件流的操作

文件流类FileStream实现大文件拷贝

大文件拷贝之所以用文件流来进行拷贝,主要是由于如果用File静态类来执行拷贝就是将整个文件整体传输,对于一个好几个G的大文件会造成内存占用大,运行慢,效率不高。所以用到文件流拷贝。文件流拷贝可以设置拷贝的二进制流缓冲区的大小,然后根据缓冲区的大小来一点一点拷贝,就类似与U盘拷贝文件到电脑似的。

下面就介绍一下如何实现拷贝

source是源文件路径,target是目标文件路径

中间缓冲区的大小看自己所要传输的文件的大小,这里创建了一个10M的缓冲区。

<span style="font-family:Microsoft YaHei;font-size:18px;">//1、创建一个读取源文件的文件流
            using (FileStream fsRead=new FileStream (source ,FileMode .Open ,FileAccess .Read ))
            {
                //2、创建一个写入目标文件的文件流
                using (FileStream fsWrite=new FileStream (target ,FileMode.Create ,FileAccess .Write))
                {
                    //拷贝文件的时候,创建一个中间缓冲区
                    byte[] bytes = new byte[1024 * 1024 * 10];
                    //返回值表示本次实际读到的字节个数
                    int r = fsRead.Read(bytes, 0, bytes.Length);

                    while (r>0)
                    {
                        //将读取到的内容写入到新文件
                        //第三个参数应该是实际读取到的字节数,而不是数组的长度
                        fsWrite.Write(bytes, 0, r);
                        Console.Write(".");
                        r = fsRead.Read(bytes, 0, bytes.Length);
                        
                    }
                }
            }</span>

Ps:

当用文件流FileStream来读取文本文档的时候,由于汉字是用2个字节编码,而字母是1个字节。对于一个固定的二进制字节流缓冲区,不能很好的区分汉字和字母,这样有可能缓冲区完毕之后最后一个汉字读到1个字节,这就是“半个汉字“这就出现了信息不完整的现象。所以这时读取文本文档就要用StreamWriter,StreamReader。



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值