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]
}
[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]
}
相关文章推荐
- C#FileStream复制大文件
- C#FileStream复制大文件【转自www.bitsCN.com】
- C# FileStream复制大文件
- C#FileStream复制大文件
- C# FileStream 文件复制
- C#FileStream复制大文件【转自www.bitsCN.com】
- C#FileStream复制大文件
- C#FileStream复制大文件
- C# FileStream复制大文件
- C# 文件写入(StreamWriter),保存文件对话框(SaveFileDialog)
- C# FileStream循环读取大文件数据
- c#FileStream文件读写
- C# FileStream 文件读写(转)
- C# FileStream、StreamWriter、StreamReader读写文件时BOM头问题
- C# 读写文件(StreamRead,StreamWrite,File,FileStream)
- c#FileStream文件读写(转)
- C# System.IO.FileStream 文件正由另一进程使用,因此该进程无法访问该文件
- C# FileStream 文件读写(转)
- c#中字节数组byte[]、图片image、流stream,字符串string、内存流MemoryStream、文件file,之间的转换
- TFileStream复制文件