FileStream大文件复制
文件 复制 FileStream
2023-09-14 09:00:59 时间
FileStream缓冲读取和写入可以提高性能。FileStream读取文件的时候,是先讲流放入内存,经Flash()方法后将内存中(缓冲中)的数据写入文件。如果文件非常大,势必消耗性能。特封装在FileHelper中以备不时之需。参考文章:http://www.cnblogs.com/yangxiaohu1/archive/2008/06/20/1226949.html将该文章中提供的代码少做修改,原文中进行了强制类型转换,如果文件很大,比如4G,就会出现溢出的情况,复制的结果字节丢失严重,导致复制文件和源文件大小不一样。这里修改的代码如下:
![复制代码](http://common.cnblogs.com/images/copycode.gif)
1 public static class FileHelper 3 /// summary 4 /// 复制大文件 5 /// /summary 6 /// param name="fromPath" 源文件的路径 /param 7 /// param name="toPath" 文件保存的路径 /param 8 /// param name="eachReadLength" 每次读取的长度 /param 9 /// returns 是否复制成功 /returns 10 public static bool CopyFile(string fromPath, string toPath, int eachReadLength) 12 //将源文件 读取成文件流 13 FileStream fromFile = new FileStream(fromPath, FileMode.Open, FileAccess.Read); 14 //已追加的方式 写入文件流 15 FileStream toFile = new FileStream(toPath, FileMode.Append, FileAccess.Write); 16 //实际读取的文件长度 17 int toCopyLength = 0; 18 //如果每次读取的长度小于 源文件的长度 分段读取 19 if (eachReadLength fromFile.Length) 21 byte[] buffer = new byte[eachReadLength]; 22 long copied = 0; 23 while (copied = fromFile.Length - eachReadLength) 25 toCopyLength = fromFile.Read(buffer, 0, eachReadLength); 26 fromFile.Flush(); 27 toFile.Write(buffer, 0, eachReadLength); 28 toFile.Flush(); 29 //流的当前位置 30 toFile.Position = fromFile.Position; 31 copied += toCopyLength; 34 int left = (int)(fromFile.Length - copied); 35 toCopyLength = fromFile.Read(buffer, 0, left); 36 fromFile.Flush(); 37 toFile.Write(buffer, 0, left); 38 toFile.Flush(); 41 else 43 //如果每次拷贝的文件长度大于源文件的长度 则将实际文件长度直接拷贝 44 byte[] buffer = new byte[fromFile.Length]; 45 fromFile.Read(buffer, 0, buffer.Length); 46 fromFile.Flush(); 47 toFile.Write(buffer, 0, buffer.Length); 48 toFile.Flush(); 51 fromFile.Close(); 52 toFile.Close(); 53 return true; 55 }
![复制代码](http://common.cnblogs.com/images/copycode.gif)
测试代码:
![复制代码](http://common.cnblogs.com/images/copycode.gif)
1 class Program 3 static void Main(string[] args) 6 Stopwatch watch = new Stopwatch(); 7 watch.Start(); 8 if (FileHelper.CopyFile(@"D:\安装文件\新建文件夹\SQLSVRENT_2008R2_CHS.iso", @"F:\SQLSVRENT_2008R2_CHS.iso", 1024 * 1024 * 5)) 10 watch.Stop(); 11 Console.WriteLine("拷贝完成,耗时:" + watch.Elapsed.Seconds+"秒"); 14 Console.Read(); 17 }
![复制代码](http://common.cnblogs.com/images/copycode.gif)
结果:
MD5校验结果:
文件: D:\安装文件\新建文件夹\SQLSVRENT_2008R2_CHS.iso 大小: 4662884352 字节 修改时间: 2010年9月3日, 10:41:26 MD5: D2BC1D35D987CC6CB8401BFB0A1E1BC9 SHA1: 0EEFF017B21635DF33F33C47E31E911CB23390F7 CRC32: 55AC3C56 文件: F:\SQLSVRENT_2008R2_CHS.iso 大小: 4662884352 字节 修改时间: 2013年9月29日, 10:51:39 MD5: D2BC1D35D987CC6CB8401BFB0A1E1BC9 SHA1: 0EEFF017B21635DF33F33C47E31E911CB23390F7 CRC32: 55AC3C56
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。
转载:http://www.cnblogs.com/wolf-sun/p/3345392.html
(二)目录及文件操作 命令:ls[选项][目录/文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。 对于文件,将列出文件名及其他
相关文章
- axios 上传文件 封装_使用axios上传文件,如何取消上传
- java filestream_java FileStream文件流操作
- 记一次授权项目中绕过某服WAF成功文件上传
- 怎样用scp在 linux 系统之间复制文件
- linux文件管理命令实例分析【权限、创建、删除、复制、移动、搜索等】
- 详解SQL Server如何修改数据库物理文件的存在位置
- Java实现多文件压缩和解压缩代码详解编程语言
- 新手快速在Linux上创建文件(创建一个文件linux)
- Linux快速复制文件夹下全部文件(linux复制文件夹下所有文件)
- 快速完成Linux多文件的复制(linux多文件复制)
- Linux GZ文件压缩及解压缩命令指南(linuxgz文件命令)
- MySQL : 存储文件的无限可能(mysql存文件)
- 的技巧Linux系统下快速复制文件的技巧(linux系统下复制文件)
- Linux快速复制U盘文件(linux复制u盘文件)
- MySQL数据存储探索之旅(mysql数据存储文件)
- Linux文件复制:快速实现一键复制(linuxcp所有文件)
- Linux文件复制简易指南(linux复制到文件)
- 定Linux文件安全之锁定技术(linux文件锁)
- 如何在 Linux 中找到并删除重复文件
- Linux复制文件命令:快速拷贝文件的方法(linux中复制文件命令)
- Linux下cp命令详解:文件复制简单易懂(linux下cp)
- Linux菜鸟必备:如何使用粘贴文件命令?(linux粘贴文件命令)
- Linux优盘,让文件随身携带,轻松安装系统。(linux优盘)
- 快速实现文件复制:Linux移动、拷贝与备份技巧(Linux复制某些文件)
- 轻松学会Linux命令:如何复制文件与目录(linux命令复制)
- Linux的cp命令:复制文件更加简单(linuxcopy命令)
- Linux下删除文件首行的方法(linux删除第一行)
- linux下如何调整分辨率(linux分辨率文件)
- 如何在Linux上复制远程文件?(linux复制远程)
- Linux下如何本地复制文件(linux本地复制文件)
- Linux内核映像文件:再次登上技术之巅(linux 内核映像文件)
- MySQL快速导入txt文件的简单方法(mysql导入txt文件)
- Linux系统下复制文件的技巧(复制文件 linux)
- Linux tail源码分析:实时查看文件变动(linuxtail源码)
- asp.net选择excel类型文件,利用Dos命令成批复制文件
- Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
- 实例分析JavaClass的文件结构
- Java调用.dll文件的方法
- 将本地文件通过远程桌面连接直接复制或粘贴到远程主机的具体方法