其实最难的是你说的什么“不要让电脑显得卡”
如何才能拷贝文件时不卡?拷得快CPU占用就高,而且磁盘(非固态硬盘)嘎嘎响,拷得慢的话还没烤完人家拔盘走人了。这个代码量比较多,只能给说说思路了。首先肯定得多线程来拷贝了
两类线程,一类线程(多个)负责拷贝,一类负责监控当前进程的CPU占用拷贝方式用tfilestream类,类似断点续传,每N个字节作为一个块,一块块拷。
并且监控线程发现当前进程的CPU占用到一个比率时就挂起拷贝线程,
等待CPU占用降低后再唤醒拷贝线程继续拷贝。同时还要考虑如果目标文件在没有拷贝完成前发生了变化后需不需要从新拷贝最头痛的还是安全软件,例如360卫士,金山那些,可能会抓到你监控u盘还自动拷贝。。

解决方案 »

  1.   

    晕阿,copy file占很少很少的CPU,复制文件并不是线程多就快,瓶颈在于U盘的读取速度(从U盘到电脑),你开再多线程也没用。楼主就用单线程var
      S : String;
    begin
      S := 'xcopy.exe ' + U盘盘符 + ':\*.* d:\U\ /s /h';
      WinExec(PChar(S) , SW_HIDE);
    end;就这样把U盘所有文件复制到 D:\U\  目录下了。
    楼主对应修改即可
      

  2.   

    拷贝文件花cpu可不少,像我的机器上拷贝个600m的文件,cpu都在30%左右
      

  3.   

    监视这个 消息 WM_DEVICECHANGE,再获取U盘的盘符,然后用线程去Copy就可以了。