现在的关键问题是:我想知道SHFileOperation拷贝所需要的时间,请问怎么得到这个时间呢?

解决方案 »

  1.   

    用接口:ICopyHook::CopyCallback If a copy callback handler is exposed and registered, SHFileOperation calls it unless you set a flag such as FOF_NOCONFIRMATION in the fFlags member of the structure pointed to by lpFileOp. See ICopyHook::CopyCallback for details on implementing copy callback handlers.参考:
    http://www.delphipages.com/threads/thread.cfm?ID=107157&G=107127
      

  2.   

    //老妖的方法const
      PROGRESS_CONTINUE = 0;
      PROGRESS_CANCEL = 1;
      PROGRESS_STOP = 2;
      PROGRESS_QUIET = 3;const
      COPY_FILE_FAIL_IF_EXISTS = $00000001;
      COPY_FILE_RESTARTABLE = $00000002;
      COPY_FILE_OPEN_SOURCE_FOR_WRITE = $00000004;function CopyProgressRoutine(
      TotalFileSize: LARGE_INTEGER;
      TotalBytesTransferred: LARGE_INTEGER;
      StreamSize: LARGE_INTEGER;
      StreamBytesTransferred: LARGE_INTEGER;
      dwStreamNumber: DWORD;
      dwCallbackReason: DWORD;
      hSourceFile: THandle;
      hDestinationFile: THandle;
      lpData: Pointer
    ): DWORD; stdcall;
    begin
      with TForm1(lpData) do
      begin
        ProgressBar1.Min := 0;
        ProgressBar1.Max := TotalFileSize.QuadPart;
        ProgressBar1.Step := 1;
        ProgressBar1.Position := TotalBytesTransferred.QuadPart;
      end;
      Application.ProcessMessages;
      Result := PROGRESS_CONTINUE;
    end; { CopyProgressRoutine }procedure TForm1.Button1Click(Sender: TObject);
    var
      vCancel: BOOL;
    begin
      vCancel := False;
      CopyFileEx('c:\temp\01.rmvb', 'e:\temp\01.rmvb', @CopyProgressRoutine,
        Self, @vCancel, COPY_FILE_FAIL_IF_EXISTS);
    end;//可以参考
    http://www.luckie-online.de/Developer/Delphi/Sonstiges/CopyFileEx.html
      

  3.   

    谢谢各位,我用SHFileOperation主要是用来Copy文件夹的,不是来Copy文件的,上面的解答都是针对文件的拷贝啊
      

  4.   

    自己写原始方法,CreateFile,ReadFile这类的,一样可行
    比较麻烦而已
      

  5.   

    时间其实你是很难得到的
    看看windows本身的拷贝,你会发现时间一会长一会短,这个系统的资源占用有关,除非你写的拷贝进程里面不停的判断字体资源使用量
      

  6.   

    连续问了几天了,都没有解决,郁闷啊!这个问题是不是很难啊,Delphi高手都跑哪里去了?
      

  7.   

    不知道这样是否可以:用FindFirst和FindNext得到目录下所有文件的名称和大小,然后找其中最小的一个文件CopyFile,计算此过程用的时间,然后按此文件占文件总大小的比例计算总的时间,并得到剩余时间,每CopyFile一次计算一次,不断更新,时间也只能是估算!