Witam
Mam problem z kopiowaniem plików o dużych rozmiarach. Poniżej znajduje się procedura kopiująca która bez problemu radzi sobie z małymi plikami. Problem pojawia się jak chce skopiować plik o rozmiarze ok 4gb. Pasek postępu nic nie wskazuje i program tak jakby się zawiesza.
Jak sprawdziłem to w katalogu docelowym jest tworzony plik, czyli kopiuje sie , z tym ze trwa to całą wieczność. Po 20 minutach zaledwie niecały 1gb się skopiował. Może ktoś mi pomóc i oświecić dlaczego tak długo to trwa? Jakieś rozwiązanie tego problemu?
FUNCTION TBackup.CopyFile(CopyFrom,CopyTo : String):string;
var
Source, Dest : TFileStream;
toCopy : Longint;
FBytesCopied,FProcessed : Integer;
const
ChunkSize : Integer = 8192;
begin
Result := '-';
FBytesCopied:=0; f1.Lab1.caption := plik;
try
source := TFileStream.Create( CopyFrom, fmOpenRead or fmShareDenyWrite );
try
Dest := TFileStream.Create( CopyTo, fmCreate );
try
repeat
if (Source.Size-Source.Position) < ChunkSize then toCopy := Source.Size-Source.Position else toCopy := ChunkSize;
Dest.CopyFrom( source, toCopy ); Inc( FBytesCopied, toCopy );
if Source.Size > 0 then FProcessed := Round(FBytesCopied*100/Source.Size) else FProcessed := 0;
f1.Gauge.Value:=FProcessed;
Application.ProcessMessages;
until Dest.Size = Source.Size;
finally end;
finally Dest.Free; end;
finally Source.Free; end;
Result:= 'ok';
end;