我在winxp下用copyfile函数向U盘考文件时,发现速度非常慢,可是在win2000中,速度非常快。基本上是十倍还不只。
后来,研究了一下。发现底层是调用kernel32.dll这个API。于是,我把2000中的API,放在XP中调用。可是会出错。不知道为什么。请大虾解答。谢谢
调用方式:implementation
  function copyFileFrom2000Api(ASourceDir:pAnsiChar; ADestDir:pAnsiChar;over:LongBool):Bool;stdcall;external 'kernel32.dll' name 'CopyFileA';
copyFileFrom2000Api('c:\1.txt','d:\1.txt',false);非常感谢!!!!

解决方案 »

  1.   

    是不是U盘的问题?你直接用Windows单元的CopyFileA来试试
      

  2.   

    我直接用CopyFileA这个方法也不行。速度很慢。大家可以在XP上试一下。考一个文件看不出来。如果考10个几。每个文件都是10来K的样子。就比较明显
      

  3.   

    CopyFile是16位的吧,用CopyFileEx试试
      

  4.   

    我怀疑是你的操作系统的的问题。
    我用你的代码在XPsp2下测试,复制10个文件到U盘,50M也就1分钟左右。
    批量复制文件也可以使用SHFileOperation
      

  5.   

    绝对不是操作系统的问题,因为我在N多XP的操作系统上试过都是非常慢的速度。我大概有71个文件,这些文件的大小在1K到10K不等。但是COPY这样的文件,大概需要2-3分钟。SHFileOperation这个方法我试过。速度也很慢我还发现这样的一个现象。就是我在程序中调用的方式COPY文件,和直接用XP中的复制功能COPY文件。速度基本上是一样的。
      

  6.   

    怎么没人怀疑是U盘的驱动问题...我怀疑一下下...支持大傻的 CSDN's forum ExplorerCSDN论坛浏览器:http://CoolSlob.ys168.com/
      

  7.   

    我也遇到过,我从我的XP下考文件到U盘就慢的要命,然后去别人的2000考相当的快,我也奇怪呢。
      

  8.   

    自己写一个也filecopy函数...
    procedure TForm1.FileCopy(const SourceFileName, TargetFileName: string);
    var
      S, T: TFileStream;
    begin
      S := TFileStream.Create(SourceFileName, fmOpenRead);
      try
        T := TFileStream.Create(TargetFileName, fmOpenWrite or fmCreate);
        try
          T.CopyFrom(S, S.Size);
        finally
          T.Free
        end;
      finally
        S.Free;
      end;
    end;
      

  9.   

    XP下的USB驱动是2.0吗
    也有可能是XP和2000管理U盘的方法不太一样,乱猜猜~
      

  10.   

    自己写函数好象也没什么用。速度还是一样。因为底层是通过kernel32.dll这个实现的。所以,我想直接把WIN2000里的这个DLL给搞出来。然后程序直接调用这个DLL完成COPY的动作。但是直接调2000下的DLL会出错。也不知道为什么。请高手解答一下!