![]() |
Datei kopieren mit Fortschrittsanzeige
Hi!
Manzoni war so nett und hat mir einen Link geschickt, auf dem steht, wie man den Fortschritt beim Kopieren einer Datei anzeigen lassen kann:
Delphi-Quellcode:
Es kommt aber leider immer, dass eine Variable verlangt wird, anstatt @FastFileCopyCallBack.
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); //<== Fehler end; |
Re: Datei kopieren mit Fortschrittsanzeige
Hi,
[cl]SHFile*[/cl] Da kannst du auch einen Statusbalken anzeigen lassen. ;) Chris |
Re: Datei kopieren mit Fortschrittsanzeige
Danke!!
Zitat:
|
Re: Datei kopieren mit Fortschrittsanzeige
Hi,
du musst den Parameternamen anpassen. Ich glaube einfach nur ein "a" anfügen. :) Chris |
Re: Datei kopieren mit Fortschrittsanzeige
Zitat:
|
Re: Datei kopieren mit Fortschrittsanzeige
Das geht irgendwie nicht, was muss ich denn genau anstelle von aFlags schreiben? In sakuras Post finde ich darüber nichts.
|
Re: Datei kopieren mit Fortschrittsanzeige
Delphi-Quellcode:
weiss net, aber evtl. funzt es so
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); var variable : TCallBack; begin FastFileCopy('c:\daten.txt', 'c:\test\daten2.txt', variable); end; wenn nicht, nimm doch den?
Delphi-Quellcode:
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; |
Re: Datei kopieren mit Fortschrittsanzeige
Zitat:
cu. |
Re: Datei kopieren mit Fortschrittsanzeige
Delphi-Quellcode:
Source untested.
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); {...} begin {...} end; {FastFileCopy} procedure TForm1.Button1Click(Sender: TObject); var aCallback : TCallBack; begin aCallback := FastFileCopyCallBack; FastFileCopy('c:\daten.txt', 'c:\test\daten2.txt', aCallback); end; Chris |
Re: Datei kopieren mit Fortschrittsanzeige
Alternativ kuck dir mal hier:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz