C# FileStream复制大文件功能
FileStream缓冲读取和写入可以提高性能。每次复制文件的一小段,以节省总内存开销。当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法。
FileStream读取文件的时候,是先讲流放入内存,经Flash()方法后将内存中(缓冲中)的数据写入文件。如果文件非常大,势必消耗性能。特封装在FileHelper中以备不时之需。强制类型转换,如果文件很大,比如4G,就会出现溢出的情况,复制的结果字节丢失严重,导致复制文件和源文件大小不一样。这里修改的代码如下:
publicstaticclassFileHelper { //////复制大文件 /// ///源文件的路径 /// 文件保存的路径 /// 每次读取的长度 /// 是否复制成功 publicstaticboolCopyFile(stringfromPath,stringtoPath,inteachReadLength) { //将源文件读取成文件流 FileStreamfromFile=newFileStream(fromPath,FileMode.Open,FileAccess.Read); //已追加的方式写入文件流 FileStreamtoFile=newFileStream(toPath,FileMode.Append,FileAccess.Write); //实际读取的文件长度 inttoCopyLength=0; //如果每次读取的长度小于源文件的长度分段读取 if(eachReadLength测试代码:
classProgram { staticvoidMain(string[]args) { Stopwatchwatch=newStopwatch(); watch.Start(); if(FileHelper.CopyFile(@"D:\安装文件\新建文件夹\SQLSVRENT_2008R2_CHS.iso",@"F:\SQLSVRENT_2008R2_CHS.iso",1024*1024*5)) { watch.Stop(); Console.WriteLine("拷贝完成,耗时:"+watch.Elapsed.Seconds+"秒"); } Console.Read(); } }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。