c# 文件拷贝速度?

liujiezh 2009-07-11 11:08:33
fastcopy到拷贝速度可能大家都知道了,它几乎能达到硬盘极限,它的网站上有提供源码,可惜看不懂,希望有人帮忙翻译一

下,看看它的思路是怎么样的。

我有用过下面的方法来测试,可是当bufferSize超过40以后就出现硬盘不能同时读写的问题而且拷贝最大速度也就是设置的

值,当bufferSize设置超过60就会报错。
[DllImport("kernel32.dll", SetLastError = true)]
static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);

public bool Copyfile(string sourcepath, string tragepath, int buffer_size)
{
try
{
SafeFileHandle fileRead = CreateFile(sourcepath, GENERIC_READ, FILE_SHARE_READ, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, IntPtr.Zero);
SafeFileHandle filewrite = CreateFile(tragepath, GENERIC_WRITE, FILE_SHARE_READ, IntPtr.Zero, CREATE_ALWAYS, FILE_FLAG_NO_BUFFERING, IntPtr.Zero);
int bufferSize = 1024 * 1024 * buffer_size;

FileStream fsr = new FileStream(fileRead, FileAccess.Read);
FileStream fsw = new FileStream(filewrite, FileAccess.Write);

BinaryReader breader = new BinaryReader(fsr);
BinaryWriter bweader = new BinaryWriter(fsw);
byte[] buffer = new byte[bufferSize];
while (fsr.Position < fsr.Length)
{
int readCount = breader.Read(buffer, 0, bufferSize);
bweader.Write(buffer, 0, readCount);
}
breader.Close();
bweader.Close();
fsr.Close();
fsw.Close();

这里是源码下载地址:http://www.ipmsg.org/archive/FastCopy199r3src.zip
...全文
236 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sirone 2012-10-24
  • 打赏
  • 举报
回复
拷贝的时候会出现io问题。不使用系统缓存就只能按整数倍的扇区来读写,最后会超过文件大小产生错误。
tianailing 2009-08-06
  • 打赏
  • 举报
回复
不太明白 帮你顶一下
liujiezh 2009-07-14
  • 打赏
  • 举报
回复
各位高人:急需帮助
mythad 2009-07-11
  • 打赏
  • 举报
回复
帮顶!
fanglong168 2009-07-11
  • 打赏
  • 举报
回复
不会,帮你顶一下。
liujiezh 2009-07-11
  • 打赏
  • 举报
回复
自己顶一下
继续等待。。
wuyq11 2009-07-11
  • 打赏
  • 举报
回复
十八道胡同 2009-07-11
  • 打赏
  • 举报
回复
up
Wilson伟庭 2009-07-11
  • 打赏
  • 举报
回复
看不懂~~还是帮你顶一下~
文件拷贝实例源码,学习关于IO文件流、多线程相关使用做参考。 private void button4_Click(object sender, EventArgs e) { this.progressBar1.Value = 0; this.label1.Text = "0%"; if (!File.Exists(this.textBox1.Text)) { MessageBox.Show("找不到目标文件!"); return; } if (!Directory.Exists(this.textBox2.Text)) { MessageBox.Show("请选择有效的保存路径!"); return; } string fileRead = this.textBox1.Text; string fileSave = Path.Combine(this.textBox2.Text, _fileName); System.Threading.ThreadPool.QueueUserWorkItem((o) => { using (IDisposable file = new FileStream(fileRead, FileMode.Open, FileAccess.Read), fileWrite = new FileStream(fileSave, FileMode.Create, FileAccess.Write)) { int count = 0; long fileLength =((FileStream)file).Length; //目标文件大小 //根据目标文件大小创建byte数组长度 byte[] data = new byte[fileLength > 1024 * 1024 * 30 ? 1024 * 1024 * 30 : fileLength]; //30M 1024 * 1024 * 30 int step = (int)Math.Ceiling(fileLength * 1.0 / data.Length); //分流段数 double n = (100 * 1.0 / step); //每次进度条累加 double m = 0; //累加统计 int spam = 1; //时间间隔 double speed = 0; //拷贝速度 do { DateTime time = DateTime.Now; //文件流操作 count = ((FileStream)file).Read(data, 0, data.Length); ((FileStream)fileWrite).Write(data, 0, count); //保存时间间隔,单位毫秒 spam = (DateTime.Now - time).Milliseconds > 0 ? (DateTime.Now - time).Milliseconds : spam;//必须大于0 //计算速度 单位k/s
Free Spire.XLS for .NET 是e-iceblue公司开发的一款支持对所有Excel格式类型文件进行操作的.NET 控件。它适用于任何类型的应用程序比如ASP.NET Web应用程序或者Windows桌面应用程序。Spire.XLS for .NET允许开发人员创建和管理Excel,而不需要安装Microsoft Excel或者Microsoft Office。相比Microsoft,Spire.XLS for .NET对于开发人员来说是一个更好的选择 - 自动化,安全,稳定,可扩展性延伸,速度快,价格便宜和功能强大。 通过使用Free Spire.XLS for .NET,开发人员可以快速方便的查看,生成,读写以及自定义编辑Excel文件。Spire.XLS for .NET支持Excel 97-2003, Excel 2007, Excel 2010 and Excel 2013。它还支持C#, VB.NET, ASP.NET和 ASP.NET MVC编程语言 作为一款专业,强大,方便易用的控件,Spire.XLS for .NET有一下主要功能: 新建Excel文件,编辑已有的Excel文件,多种保存Excel方式,设置Excel文件属性,文件打印设置,合并,拆分或者拷贝单元格,支持对Excel文件加锁或者加密保护。 Spire.XLS for .NET支持把数据从数据库导出到Excel工作表,或者把数据从Excel数据导入到数据库。 Spire.XLS for .NET 提供强大的功能为开发者设置单元格格式。这次格式化数字,文字缩进,定位调整,设置单元格边线,单元格填充以及保护等。 开发人员可以轻松的利用Spire.XLS for .NET向Excel文件里面写入内容,包括超过530多种的公式,70多种表格,支持插入图片,不同类型的文字,链接,注释甚至VBA等。 Spire.XLS for .NET 还允许开发人员将Excel文件转换成PDF, HTML, CSV, Text, XML以及图片格式。 注:下载包含有Spire.xls.dll文件以及部分Demo, 你可以调用DLL并参照Demo提供的代码处理Excel文档。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧