您的位置:首页 > 编程语言 > C#

C#FileStream复制大文件

2008-06-17 13:07 375 查看
即每次复制文件的一小段,以节省总内存开销。当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法。
[align=left] ///<summary>[/align]
[align=left] ///复制文件[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="fromFile">要复制的文件</param>[/align]
[align=left] ///<param name="toFile">要保存的位置</param>[/align]
[align=left] ///<param name="lengthEachTime">每次复制的长度</param>[/align]
[align=left] private void CopyFile(string fromFile, string toFile, int lengthEachTime)[/align]
[align=left] {[/align]
[align=left] FileStream fileToCopy = new FileStream(fromFile, FileMode.Open, FileAccess.Read);[/align]
[align=left] FileStream copyToFile = new FileStream(toFile, FileMode.Append, FileAccess.Write);[/align]
[align=left] int lengthToCopy;[/align]
[align=left] if (lengthEachTime < fileToCopy.Length)//如果分段拷贝,即每次拷贝内容小于文件总长度[/align]
[align=left] {[/align]
[align=left] byte[] buffer = new byte[lengthEachTime];[/align]
[align=left] int copied = 0;[/align]
[align=left] while (copied <= ((int)fileToCopy.Length - lengthEachTime))//拷贝主体部分[/align]
[align=left] {[/align]
[align=left] lengthToCopy = fileToCopy.Read(buffer, 0, lengthEachTime);[/align]
[align=left] fileToCopy.Flush();[/align]
[align=left] copyToFile.Write(buffer, 0, lengthEachTime);[/align]
[align=left] copyToFile.Flush();[/align]
[align=left] copyToFile.Position = fileToCopy.Position;[/align]
[align=left] copied += lengthToCopy;[/align]
[align=left] }[/align]
[align=left] int left = (int)fileToCopy.Length - copied;//拷贝剩余部分[/align]
[align=left] lengthToCopy = fileToCopy.Read(buffer, 0, left);[/align]
[align=left] fileToCopy.Flush();[/align]
[align=left] copyToFile.Write(buffer, 0, left);[/align]
[align=left] copyToFile.Flush();[/align]
[align=left] }[/align]
[align=left] else//如果整体拷贝,即每次拷贝内容大于文件总长度[/align]
[align=left] {[/align]
[align=left] byte[] buffer = new byte[fileToCopy.Length];[/align]
[align=left] fileToCopy.Read(buffer,0,(int)fileToCopy.Length);[/align]
[align=left] fileToCopy.Flush();[/align]
[align=left] copyToFile.Write(buffer, 0, (int)fileToCopy.Length);[/align]
[align=left] copyToFile.Flush();[/align]
[align=left] }[/align]
[align=left] fileToCopy.Close();[/align]
[align=left] copyToFile.Close();[/align]
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: