檔案複製進度 |
缺席
|
jacike
一般會員 發表:17 回覆:22 積分:7 註冊:2003-11-17 發送簡訊給我 |
hagar大大這是你先前po的 , 小弟對於裡面的code不是很理解(自己試過將code複製到我的delphi內編釋卻出現error我想是我不知道如何去排列放置code吧),能否hagr或有功力的大大幫小弟整理一下,再將code po上來,抱歉小弟粗淺.
原始文章: http://delphi.ktop.com.tw/board.php?cid=30&fid=69&tid=56095 | |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
||
jacike
一般會員 發表:17 回覆:22 積分:7 註冊:2003-11-17 發送簡訊給我 |
stallion大大你可能誤會小弟意思了 , 由於hagar大大所聯結的外國網站確實在顯示上也些問題導致對那網頁都搞不懂(對於我這小小學弟來說是不可能的任務) , 那至於Hagar大大所貼的程式碼部分 , 對於學長門應該不難懂 , 笨的是小弟 , 小弟也有說CODE部分我有可能放錯位置所導致的錯誤 , 如果說我只把code部分都給照本宣科給她貼上我的delphi上編釋的話我想問題可能會問到連我自己都放棄 , 小弟只是想說能不能照顧到像我這麼菜的學弟 , 學長門應該不會有這樣的問題吧,我看學弟我先自己在研究看看哪裡有問題好囉,謝謝大大的指導.非常感恩~
|
|
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
(1)
不是把所有的程式都貼上去 他有{1} .... {4} 代表有四種方法可以用 你要自己選一種 (2) 該宣告的部分要自己宣告 該放的元件要自己放 (3) 不知道code要放哪邊 去找本delphi 的書來看吧...... 書上都有寫
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL
編輯記錄
eaglewolf 重新編輯於 2007-05-19 08:59:11, 註解 加入(3)‧
|
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
小弟把程式碼重新整理後再貼一次,原始程式碼出自於:
http://www.swissdelphicenter.ch/en/showcode.php?id=330 由於語系的問題,網頁的文字的確會變成亂碼,只要以萬國碼檢視後原始碼就很容易可以整理清爽了~ 至於如何加入自己的程式中,是屬於Delphi編寫程式的基本吧,小弟在這裡就不提了,以下一共有四種方法,請參考~ <textarea cols="60" rows="10" class="delphi" name="code"> //方法{ 1. } { You need a TProgressBar on your form for this tip. Fur diesen Tip wird eine TProgressBar ben tigt. } procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string); var FromF, ToF: file of byte; Buffer: array[0..4096] of char; NumRead: integer; FileLength: longint; begin AssignFile(FromF, Source); reset(FromF); AssignFile(ToF, Destination); rewrite(ToF); FileLength := FileSize(FromF); with Progressbar1 do begin Min := 0; Max := FileLength; while FileLength > 0 do begin BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead); FileLength := FileLength - NumRead; BlockWrite(ToF, Buffer[0], NumRead); Position := Position NumRead; end; CloseFile(FromF); CloseFile(ToF); end; end; procedure TForm1.Button1Click(Sender: TObject); begin CopyFileWithProgressBar1('c:\Windows\Welcome.exe', 'c:\temp\Welcome.exe'); end; //----------------------------------------------------------------------------- //方法{ 2. } // To show the estimated time to copy a file: procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string); var FromF, ToF: file of byte; Buffer: array[0..4096] of char; NumRead: integer; FileLength: longint; t1, t2: DWORD; maxi: integer; begin AssignFile(FromF, Source); reset(FromF); AssignFile(ToF, Destination); rewrite(ToF); FileLength := FileSize(FromF); with Progressbar1 do begin Min := 0; Max := FileLength; t1 := TimeGetTime; maxi := Max div 4096; while FileLength > 0 do begin BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead); FileLength := FileLength - NumRead; BlockWrite(ToF, Buffer[0], NumRead); t2 := TimeGetTime; Min := Min 1; // Show the time in Label1 label1.Caption := FormatFloat('0.00', ((t2 - t1) / min * maxi - t2 t1) / 100); Application.ProcessMessages; Position := Position NumRead; end; CloseFile(FromF); CloseFile(ToF); end; end; //----------------------------------------------------------------------------- //方法{ 3. } // To show the estimated time to copy a file, using a callback function: type TCallBack = procedure(Position, Size: Longint); { export; } procedure FastFileCopy(const InFileName, OutFileName: string; CallBack: TCallBack); implementation procedure FastFileCopyCallBack(Position, Size: Longint); begin Form1.ProgressBar1.Max := Size; Form1.ProgressBar1.Position := Position; end; procedure FastFileCopy(const InFileName, OutFileName: string; CallBack: TCallBack); const BufSize = 3 * 4 * 4096; { 48Kbytes gives me the best results } type PBuffer = ^TBuffer; TBuffer = array[1..BufSize] of Byte; var Size: DWORD; Buffer: PBuffer; infile, outfile: file; SizeDone, SizeFile: LongInt; begin if (InFileName <> OutFileName) then begin buffer := nil; Assign(infile, InFileName); Reset(infile, 1); try SizeFile := FileSize(infile); Assign(outfile, OutFileName); Rewrite(outfile, 1); try SizeDone := 0; New(Buffer); repeat BlockRead(infile, Buffer^, BufSize, Size); Inc(SizeDone, Size); CallBack(SizeDone, SizeFile); BlockWrite(outfile, Buffer^, Size) until Size < BufSize; FileSetDate(TFileRec(outfile).Handle, FileGetDate(TFileRec(infile).Handle)); finally if Buffer <> nil then Dispose(Buffer); CloseFile(outfile) end; finally CloseFile(infile); end; end else raise EInOutError.Create('File cannot be copied onto itself') end; {FastFileCopy} procedure TForm1.Button1Click(Sender: TObject); begin FastFileCopy('c:\daten.txt', 'c:\test\daten2.txt', @FastFileCopyCallBack); end; //----------------------------------------------------------------------------- //方法{ 4. } function CopyFileWithProgressBar2(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: LARGE_INTEGER; dwStreamNumber, dwCallbackReason: DWORD; hSourceFile, hDestinationFile: THandle; lpData: Pointer): DWORD; stdcall; begin // just set size at the beginning if dwCallbackReason = CALLBACK_STREAM_SWITCH then TProgressBar(lpData).Max := TotalFileSize.QuadPart; TProgressBar(lpData).Position := TotalBytesTransferred.QuadPart; Application.ProcessMessages; Result := PROGRESS_CONTINUE; end; function TForm1.CopyWithProgress(sSource, sDest: string): Boolean; begin // set this FCancelled to true, if you want to cancel the copy operation FCancelled := False; Result := CopyFileEx(PChar(sSource), PChar(sDest), @CopyFileWithProgressBar2, ProgressBar1, @FCancelled, 0); end; </textarea> |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
||
jacike
一般會員 發表:17 回覆:22 積分:7 註冊:2003-11-17 發送簡訊給我 |
謝謝大大們的回應 ,小弟真恨自己為什麼學不如人家,小弟有這樣的難題真的為難大家,因為妳們都覺得為什麼那麼容易為什麼不會,因為小弟不是專業程式設計師(因為就是那研究程式碼的那股認真那股喜悅吧吸引著我),也不是踏這一行(也希望自己功力夠能夠當個程設師),並非跟大家的口水戰,有時又真的PO了小小問題真怕大大們回應是這樣,我知道大大的心態恨鐵不成鋼,小弟會把大大的用心,讓小弟更用心專研,感恩大大,不好意思大大錯在小弟原先是把所有的CODE都給COPY到我的CODE裡面編釋所以問題一堆,不知道是4個選擇其一來使用,大大這麼一講問題就解決了一大半了,小弟在此為自己的不才深深的一鞠躬謝謝大家的建議與批評。
|
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
jacike兄不必自責,沒有人對學問一開頭就是專才的!要觀察的是他的學習態度,到底是盡了心力還是隨意敷衍了事!這種態度常常決定了別人會不會幫你!
我自己也不是資訊科班出身,只因因緣際會走上了這條不歸路,但因興趣所致也常感到甘之如飴。轉眼寫CODE也近16年,自己覺得在這條專業領域沒啥很大長進,無法與大師級的人物比擬,作不了偉大的CASE,但是應付己身的需求應該是綽綽有餘吧!?或許這也是可以自我安慰的地方。哈~ 眼見自己下個月就要退休了,其實自己對單晶片也蠻有興趣的,很想要玩玩這種技術,但基本電路學在數十年前(哈!夠老了吧!)早已還給老師了,目前還是不得其門而入,所以我的景況與你雷同,讓我們共勉之~ P.S.你該結案的要記得結案,論壇的素質要靠你我維持。 ===================引 用 jacike 文 章=================== 謝謝大大們的回應 ,小弟真恨自己為什麼學不如人家,小弟有這樣的難題真的為難大家,因為妳們都覺得為什麼那麼容易為什麼不會,因為小弟不是專業程式設計師(因為就是那研究程式碼的那股認真那股喜悅吧吸引著我),也不是踏這一行(也希望自己功力夠能夠當個程設師),並非跟大家的口水戰,有時又真的PO了小小問題真怕大大們回應是這樣,我知道大大的心態恨鐵不成鋼,小弟會把大大的用心,讓小弟更用心專研,感恩大大,不好意思大大錯在小弟原先是把所有的CODE都給COPY到我的CODE裡面編釋所以問題一堆,不知道是4個選擇其一來使用,大大這麼一講問題就解決了一大半了,小弟在此為自己的不才深深的一鞠躬謝謝大家的建議與批評。 |
|
jacike
一般會員 發表:17 回覆:22 積分:7 註冊:2003-11-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |