Merhaba delphi_coder,
- Problemini FileStream ile çözmene sevindim.
- Bir öneri, eğer zamanın müsait olursa FileStream ile nasıl çözdüğünü kodlarla foruma yansıtırsan ben ve diğer ihtiyacı olanlar da öğrenebiliriz.
CopyFile ve ProgressBar
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- sertkayasalih
- Üye
- Mesajlar: 178
- Kayıt: 12 Haz 2003 12:47
- Konum: Antalya
- İletişim:
merhaba.
tabii ki paylaşırım, buyrun..
kolay gelsin.
tabii ki paylaşırım, buyrun..
Kod: Tümünü seç
Procedure TMain.FileCopy(Const SourceFileName, TargetFileName: String; Progress : Tprogressbar);
Var
SFile, TFile: TFileStream;
F_File: file;
Begin
SFile := TFileStream.Create(Sourcefilename, fmOpenRead);
progress.Max := SFile.Size;
try
TFile := TFileStream.Create(targetfilename,fmOpenWrite or fmCreate);
try
TFile.CopyFrom(SFile, SFile.Size ) ;
progress.Position := SFile.Position;
finally
TFile.Free;
end;
finally
SFile.Free;
end;
progress.Position := 0;
End;
- sertkayasalih
- Üye
- Mesajlar: 178
- Kayıt: 12 Haz 2003 12:47
- Konum: Antalya
- İletişim:
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
Kod: Tümünü seç
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;
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
begin
FastFileCopy('c:\kaynak.dosya', 'c:\Hedef.dosya', @FastFileCopyCallBack);
end;
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome