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

       与java中的各种文件流,网络流类似,.net中也有各类流。流的主要用途就是与应用程序外部的文件或数据源进行数据交互。基类为stream,定义在命名空间system.io下;

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

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

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

       之后是我们的代码:     

#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中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2550591.html

(0)
上一篇 2025年3月6日 05:59:20
下一篇 2025年3月6日 05:59:26

AD推荐 黄金广告位招租... 更多推荐

发表回复

登录后才能评论