Jak skopiować plik, aby jego postęp był pokazywany na ProgressBar
Adam Boduch
Można skorzystać z poniższego kodu:
procedure TMain.CopyClick(Sender: TObject);
const
SrcPath = 'C:flash.rar';
DstPath = 'C:flash-kopia.rar';
var
Src, Dst : File;
FSize : Integer;
RealSize : Integer;
Buffer: array[0..1024] of char;
TotalSize : Integer;
begin
TotalSize := 0;
AssignFile(Src, SrcPath);
try
Reset(Src, 1); // otwieramy plik źródłowy
AssignFile(Dst, DstPath);
try
ReWrite(Dst, 1); // tworzymy nowy plik
FSize := FileSize(Src); // określamy rozmiar pliku źródłowego
Progress.Max := FSize;
{ pętla odczytuje określone porcje danych a następnie te porcje
zapisuje do nowego pliku }
repeat
// odczytaj 1 kB danych
BlockRead(Src, Buffer, SizeOf(Buffer), RealSize);
if RealSize > 0 then // jeżeli odczytany rozmiar jest większy od zera...
begin
{ dodaj do zmiennej TotalSize }
TotalSize := TotalSize + RealSize;
{ zapisz odczytaną porcję danych do pliku przeznaczenia }
BlockWrite(Dst, Buffer, RealSize);
Progress.Position := TotalSize;
end;
until RealSize = 0;
finally
CloseFile(Dst);
end;
finally
CloseFile(Src);
end;
end;
A chcac uzyskać taki efekt ale podczas kopiowania plikow z zasobow na hdd to co musze zrobić ??
Exar Kun napisał :-)
mi nie dziala blad wyskakuje przy linii
Progress.Max := FSize;
co robic?
Wrzuć na formę progrssbar, zmień jego nazwę na progress i daj ten kod np. w onclick button :
mi nie dziala blad wyskakuje przy linii
Progress.Max := FSize;
co robic?