[求助]关于文件的快速拷贝!

LoveBugs 2005-08-20 03:26:15
怎么才能使文件的拷贝速度加快?
试过几种方法了:
一、多线程读,多线程写
二、重叠I/O
三、内存映射文件

不见效果。很想知道类似 Killcopy的软件的实现原理。
谢谢!
...全文
301 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
classfree 2005-12-04
  • 打赏
  • 举报
回复
怎么拷贝的. 能代码吗?
如何显示进度(自己的进度条)?
nelsonc 2005-08-23
  • 打赏
  • 举报
回复
你是不是一个操作完成了,才进行下一个操作啊?
用异步调用,你必须同时发出多个读写请求才会快啊。
看来这个问题还是不那么简单的。
LoveBugs 2005-08-22
  • 打赏
  • 举报
回复
结贴好了。
加了FILE_FLAG_NO_BUFFERING之后,变得好慢,因为没用系统缓存。
后来,读部分,用多线程映射不同的FILAMAP,写用异步I/O,试了一次,拷个4G的文件,快了几秒。
LoveBugs 2005-08-21
  • 打赏
  • 举报
回复
谢谢楼上两位的回复。

回lianglp:
源文件和目标用文件映射不可以吗?
建立多个映射句柄,分开拷贝。
... ...
源文件和目标文件我都是用的文件映射,不见效果。于是我开了多个读线程,一个写线程,每个读线程都映身文件的不同部分到Buff中,写线程在Buff有数据的时候就写入到文件中。这样应该算是预取数据了吧。 呵。
源文件-->内存-->目标文件
就变成了
内存--->内存-->目标文件
我是这样想的,而且这样做了,测试结果一样。

回nelsonc(软件兔):
你的说方法还没试,试过了再向你报告呀。


nelsonc 2005-08-21
  • 打赏
  • 举报
回复
打开文件使用FILE_FLAG_NO_BUFFERING和FILE_FLAG_OVERLAPPED可以达到最高的异步文件访问速度。
不过对编程能力要求是很高的。一般的文件访问需要通过系统缓存,所以效率不能达到最高。而通过这两个选项,必须自己实现缓冲机制,调配的好的话速度比直接复制要快。
有兴趣的试试看。
lianglp 2005-08-20
  • 打赏
  • 举报
回复
源文件和目标用文件映射不可以吗?
建立多个映射句柄,分开拷贝。

或用overlap模式进行
LoveBugs 2005-08-20
  • 打赏
  • 举报
回复
KillCopy来自俄罗斯,一个不错的增强型文件移动、复制工具,支持多国语言、可换皮肤,其特色是——具有众多的文件传输选项(如复制完毕后自动关机),同时还支持断点复制,而且复制文件的速度比Windows本身的要快(复制大文件时效果非常明显)。

就是不明白为什么它们做到“复制文件的速度比Windows本身的要快”。我试过了,的确是比系统复制快。
i_noname 2005-08-20
  • 打赏
  • 举报
回复
不明白,帮顶。但是拷贝文件这种操作是有硬件限制的,算法上的改进能起多大作用呢?不解
LoveBugs 2005-08-20
  • 打赏
  • 举报
回复
自己顶自己

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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