• 技术文章 >后端开发 >C#.Net教程

    .net 流——使用流进行文件复制

    黄舟黄舟2017-02-24 10:44:08原创970
    与Java中的各种文件流,网络流类似,.net中也有各类流。流的主要用途就是与应用程序外部的文件或数据源进行数据交互。基类为Stream,定义在命名空间System.IO下;

    一,使用流进行一次性的复制写入

    首先我们在桌面上建个测试用的文件,写入些东西:

    之后是我们的代码:

    #region 使用流进行一次性复制
    
                //创建一个文件流对象(参数一:指定了文件的位置;参数二:枚举值,指定操作系统打开文件的方式;参数三:表明了打开文件的意图;注意第二个参数与第三个参数要注意搭配使用)
                  Stream source = new FileStream(@"C:/Users/v-liuhch/Desktop/StreamTest.txt", FileMode.Open, FileAccess.Read);
                    byte[] buffer = new byte[source.Length];
                //将文件数据写入到字节数组中(参数一:要写入的字节数组; 参数二:用于设定文件从哪个位置开始读取;参数三:读取的字节数)
                    int byteRead = source.Read(buffer, 0, (int)source.Length);//返回值为读取到的字节数
                    //foreach (var b in buffer)
                    //{
                    //   // Console.WriteLine(Convert.ToString(b, 2));//二进制
                    //    //Console.WriteLine(Convert.ToString(b, 10));//十进制
                    //    Console.WriteLine(Convert.ToString(b, 16).ToUpper());//十六进制
                    //}
                    //Console.ReadKey();
    
    
                    //将文件写入StreamTarget.txt
                    using (Stream target = new FileStream(@"C:/Users/v-liuhch/Desktop/StreamTarget.txt", FileMode.Create, FileAccess.Write))
                    {
                        target.Write(buffer, 0, buffer.Length);
                    }
                    
                    source.Dispose();
    
    
                #endregion

    注意如果不使用using,别忘了dispose.



    二,循环分批的复制

    为了测试下面这段代码,建议找个大点儿的文件啥滴。

    #region 循环分批复制
    
                    /*问题出现背景:
                         传递一个更大的文件;
                     *   事先无法得知文件的大小,例如读取网络文件;
                     *   上述情况不能创建一个尺寸正好合适的byte[]数组,此时只能分批读取和写入,每次只读取部分字节,直到文件尾部; 
                     */
    
                int BufferSize = 10240;//10KB
                using ( Stream source = new FileStream(@"C:/Users/v-liuhch/Desktop/sherlock.wmv", FileMode.Open, FileAccess.Read))
                {
                    using (Stream target = new FileStream(@"C:/Users/v-liuhch/Desktop/sherlockCopy.wmv", FileMode.Create, FileAccess.Write))
                    {
                        byte[] buffer = new byte[BufferSize];
                        int bytesRead;
                        do
                        {
                            bytesRead = source.Read(buffer, 0, BufferSize);
                            target.Write(buffer, 0, bytesRead);
                        } while (bytesRead > 0);
                    }
                }
                #endregion

    PS:建议使用using;

    对大文件采取分割读取的方式还是比较科学滴,类似大文件上传的原理。


    以上就是.net 流——使用流进行文件复制的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!






    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:.net 流——流的类型体系简单介绍 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • c语言中源文件编译后生成什么文件• C#中GDI+编程10个基本技巧二• 应用绝对路径与相对路径• ASP.NET使用Ajax如何返回Json对象的方法具体介绍• 解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误
    1/1

    PHP中文网