全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1466
推到 Plurk!
推到 Facebook!

關於複製檔案

答題得分者是:huwk
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-13 15:55:40 IP:61.59.xxx.xxx 未訂閱
我參閱過許多先進們關於Copy File的文章,其還是有些不解 ================================================ IF not CopyFile(PCHAR(DataName) , PCHAR(SYS_PATH '\DAT.MDB'), False) Then MessageBox(FMTRANS.Handle, '檔案複製發生錯誤!' , '檔案複製' , MB_Ok) else MessageBox(FMTRANS.Handle, '檔案複製完成!', '檔案複製' , MB_Ok); ================================================ 1.如何加入如Windows Copy Antimate or Gague,否則不知道到底複製之情況為何 2.為何其複製之速度比起Windows之速度快得驚人,我曾用上程序透過區網複製約300MB之MDB檔不到5秒便ok,用Windows少說也要20秒吧.去查目的檔也OK,只怕是否會有什麼問題
huwk
資深會員


發表:26
回覆:340
積分:323
註冊:2002-04-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-14 00:10:56 IP:211.76.xxx.xxx 未訂閱
1.可用 copyfileex..   由help中得知,只支援winnt平台的api.是要特別注意的   而在help中也得知..需要一個 CopyProgressRoutine. callback function   但於文件中的說時指出,delphi並未幫你定義.so.請手動(d7裡也沒定義)          
 
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls;    type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.DFM}    function CopyProgressRoutine(
  TotalFileSize : LARGE_INTEGER;           // total file size, in bytes
  TotalBytesTransferred : LARGE_INTEGER;   // total number of bytes transferred
  StreamSize : LARGE_INTEGER;              // total number of bytes for this stream
  StreamBytesTransferred : LARGE_INTEGER;  // total number of bytes transferred for this stream
  dwStreamNumber : DWORD;                  // the current stream
  dwCallbackReason : DWORD;                // reason for callback
  hSourceFile : THANDLE;                   // handle to the source file
  hDestinationFile : THANDLE;              // handle to the destination file
  lpData : TProgressBar                    // passed by CopyFileEx
) : DWORD; stdcall;
var
  Pos: Int64;
begin
  if lpData.Max <> TotalFileSize.QuadPart  then
    lpData.Max  := (TotalFileSize.QuadPart);
  Pos := (TotalBytesTransferred.QuadPart);
  lpData.Position := pos;
  Result := PROGRESS_CONTINUE;
end;    procedure TForm1.Button1Click(Sender: TObject);
var bcancel:BOOL;
begin
  bcancel := false;
  ProgressBar1.smooth := true;
  ProgressBar1.Position := 0;      if  CopyFileEx(pchar('c:\temp\1.txt'),    //來源
                 pchar('c:\temp\2.txt'),    //目地
                 @CopyProgressRoutine,
                 ProgressBar1,
                 @bcancel,
                 COPY_FILE_RESTARTABLE
   ) then
     showmessage('Succ')
   else
     showmessage('ERR');
end;    end.    
2.我用29mb的檔案做測試.. 並沒有感覺速度有很大的不同. 我想有可能造成的原因為,原來copyfile並沒有顯示進度 但windows內的的複製有進度,so..會慢些.. (ps.但是我不管用copyfile或copyfileex,覺得速沒什麼分別,有空再來 測測看好囉)
------
熊的學習 http://huwk.blogspot.com
系統時間:2024-05-20 14:42:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!