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

简介:        与Java中的各种文件流,网络流类似,.net中也有各类流。流的主要用途就是与应用程序外部的文件或数据源进行数据交互。基类为Stream,定义在命名空间System.IO下; 一,使用流进行一次性的复制写入            首先我们在桌面上建个测试用的文件,写入些东...


       与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;


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












目录
相关文章
|
6月前
|
C# Windows
.NET开源免费的Windows快速文件搜索和应用程序启动器
今天大姚给大家分享一款.NET开源(MIT License)、免费、功能强大的Windows快速文件搜索和应用程序启动器:Flow Launcher。
108 0
|
27天前
|
C# Windows
一款基于.NET开发的简易高效的文件转换器
一款基于.NET开发的简易高效的文件转换器
|
2月前
.NET 压缩/解压文件
【9月更文挑战第5天】在 .NET 中,可利用 `System.IO.Compression` 命名空间进行文件的压缩与解压。首先引入相关命名空间,然后通过 GZipStream 类实现具体的压缩或解压功能。下面提供了压缩与解压文件的方法示例及调用方式,便于用户快速上手操作。
|
3月前
|
Java Windows 容器
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
|
3月前
|
开发框架 .NET Linux
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
|
4月前
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
4月前
|
算法 API 数据安全/隐私保护
.NET使用原生方法实现文件压缩和解压
.NET使用原生方法实现文件压缩和解压
.NET使用原生方法实现文件压缩和解压
|
4月前
|
存储 C#
.NET使用CsvHelper快速读取和写入CSV文件
.NET使用CsvHelper快速读取和写入CSV文件
|
5月前
|
存储 安全 Unix
【.Net Core】深入理解IO之文件和目录
【.Net Core】深入理解IO之文件和目录
54 4
|
5月前
|
存储 C#
.NET使用CsvHelper快速读取和写入CSV文件
优秀项目和框架精选 该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。
下一篇
无影云桌面