關於複製檔案 |
答題得分者是:huwk
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
我參閱過許多先進們關於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 發送簡訊給我 |
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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |