★米老鼠★的问题之四:关于Copy文件与文件夹?

GaoLun 2003-05-14 03:26:05
加入现有A,B两个硬盘,Copy文件,从A-》B,如果B盘同一目录下已经有A要Copy过来的文件,则跳过不Copy,如果A盘的 新于B的,或者是文件大小大于B的,则覆盖,
,Copy到中途可以停止,但是停止后希望能记录Copy的进度,就是说,那些已经Copy过了,那些还没有?(因为比如有A(120G)B(80)C(60)现从A-》B和C,该怎么Copy)
我试过的方法
1:SHFILEOPSTRUCT ,

2:
void __fastcall TForm1::CopyFileToDir(AnsiString Source, AnsiString Target, AnsiString FileExt)
{
TSearchRec sr;
if (FindFirst(Source + FileExt, faArchive, sr) == 0)
{
do
{
CopyFile((Source + sr.Name).c_str(), (Target + sr.Name).c_str(), false);
}
while (FindNext(sr) == 0);
FindClose(sr);
}
}


可是这几个都不能很好的实现我要求的,SHFILEOPSTRUCT 根本就没有办法记录Copy的进度,而第二个,也要现把要Copy的放入数据库,执行起来,要先扫描文件,很慢,看看大家有没有比较好的Copy方法,能满足我的要求的,
先谢谢了!~
...全文
64 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
kataboy 2003-05-22
  • 打赏
  • 举报
回复
呵呵。。。。
我是来学习的!
GaoLun 2003-05-22
  • 打赏
  • 举报
回复
不要关注,不要up 我要的是答案, 继续
yingyys 2003-05-22
  • 打赏
  • 举报
回复
关注
clz2002 2003-05-22
  • 打赏
  • 举报
回复
up
GaoLun 2003-05-16
  • 打赏
  • 举报
回复
to bigwhiteshark

靠你从那里复制过来的,看起来比较眼熟

呵呵

to myy 和 懒猫

我自己试一试 看看
IT-司马青衫 2003-05-16
  • 打赏
  • 举报
回复
如何拷贝整个文件夹里的文件?
拷贝单个文件是:CopyFile(Src, Dest, bOverWrite),那么要拷贝子目录,应如何写?
①拷贝某子目录里的所有文件到另一个子目录底下;
②拷贝某子目录到另一个目录下,就是新建一目录。
分别怎么实现?谢谢!



SHFILEOPSTRUCT lpfile;
lpfile.hwnd =Handle;
lpfile.wFunc=FO_COPY;
lpfile.fFlags=FOF_FILESONLY |FOF_MULTIDESTFILES;
lpfile.pFrom="路径 \0";
lpfile.pTo="路径";
lpfile.fFlags=FOF_MULTIDESTFILES;
lpfile.fAnyOperationsAborted=true;
SHFileOperation(&lpfile);
应该用SHFileOperationL符合你的要求
上面的代码我测试过的.放心用
myy 2003-05-16
  • 打赏
  • 举报
回复
楼上说的不错,文件的校验确实会很影响效率的,但用与否,还要看具体需求了,呵呵。
penu 2003-05-16
  • 打赏
  • 举报
回复
另:
楼上各位提出的使用MD5、CRC等校验方法来判断文件是否需要复制,其实并不是一个好办法,因为这将使扫描速度大幅下降。
penu 2003-05-16
  • 打赏
  • 举报
回复
老鼠:

我昨晚测试了一下,多线程对提高复制速度没有什么作用(甚至会出现复制错误),用在扫描上还不错。要提高复制速度只有:
1、不用SHELL复制,自己写代码
2、大缓冲
3、小文件多个一次读入,一次写出
myy 2003-05-16
  • 打赏
  • 举报
回复
所谓 hash 值 ,就是文件的校验值,可以采用crc、md5等算法取得,这样获取的值,只要文件内容不同,校验值就不会一样,用以检验文件是否被更改过。

关于文件md5的算法:

http://expert.csdn.net/Expert/topic/1776/1776173.xml?temp=4.165286E-02
GaoLun 2003-05-16
  • 打赏
  • 举报
回复
^_^ cker 你说的 hash 值 能不能详细一点
kataboy 2003-05-16
  • 打赏
  • 举报
回复
关注。
  • 打赏
  • 举报
回复
叫老板和客户一起手工编制好复制列表,输入到excel中,这样就不要先扫描了 。。。


哈哈哈,

唉,这是逻辑上的问题,如果什么都不作,这个复制过程的可靠性由谁来保证呢?
我看最好每次还要记录下复制文件的hash值,对比一下才放心啊。。。

^_^
GaoLun 2003-05-15
  • 打赏
  • 举报
回复
呵呵 我还在等着呢 看有没有最好的办法

大家继续
penu 2003-05-15
  • 打赏
  • 举报
回复
要预扫描是肯定的,大量文件扫描很耗时是肯定的,复制耗时也是肯定的。

只能从以下地方下功夫:
1、扫描算法:怎样提高扫描速度。
2、多线程复制:提高复制速度。
MAX°孟兆 2003-05-15
  • 打赏
  • 举报
回复
To GaoLun:
我的那段程序是通用型的框架,你自己在上面针对你的情况进行修改一下
这么大量的运算肯定会费时的了,没什么特别的方法可以大幅度提高效率吧
GaoLun 2003-05-15
  • 打赏
  • 举报
回复
我倒,

怎么都是听课的,那老师在那里?
谁来做老师,

systermman 2003-05-15
  • 打赏
  • 举报
回复
以上大家说的不错,可是 如果真的有你说的那么多的文件的话
如果扫描一次得花费很多的时间,
看看还有没有比较好的办法

搬个凳子来听课
ITBlueCollar 2003-05-15
  • 打赏
  • 举报
回复
我也想要一份
huangma163@hotmail.com

thanks!
GaoLun 2003-05-15
  • 打赏
  • 举报
回复
to gdyt007(蠱惑仔重出江湖) 不错 你是第一个,都没有人理我


呵呵

to myy 这种要求比较过分哦


人家是客户要求过分,可是这是我老板要求的,没有办法
加载更多回复(21)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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