mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 21:49:09 +02:00
* Onprogress added to .compress and .decompress
git-svn-id: trunk@14551 -
This commit is contained in:
parent
4989a1016f
commit
d52071fc04
@ -664,13 +664,23 @@ Var
|
||||
Buf : PByte;
|
||||
I,Count,NewCount : Integer;
|
||||
C : TCompressionStream;
|
||||
|
||||
BytesNow : Integer;
|
||||
NextMark : Integer;
|
||||
OnBytes : Integer;
|
||||
FSize : Integer;
|
||||
begin
|
||||
CRC32Val:=$FFFFFFFF;
|
||||
Buf:=GetMem(FBufferSize);
|
||||
if FOnPercent = 0 then
|
||||
FOnPercent := 1;
|
||||
OnBytes:=Round((FInFile.Size * FOnPercent) / 100);
|
||||
BytesNow:=0; NextMark := OnBytes;
|
||||
FSize:=FInfile.Size;
|
||||
Try
|
||||
C:=TCompressionStream.Create(FCompressionLevel,FOutFile,True);
|
||||
Try
|
||||
if assigned(FOnProgress) then
|
||||
fOnProgress(self,0);
|
||||
Repeat
|
||||
Count:=FInFile.Read(Buf^,FBufferSize);
|
||||
For I:=0 to Count-1 do
|
||||
@ -678,6 +688,13 @@ begin
|
||||
NewCount:=Count;
|
||||
While (NewCount>0) do
|
||||
NewCount:=NewCount-C.Write(Buf^,NewCount);
|
||||
inc(BytesNow,Count);
|
||||
if BytesNow>NextMark Then
|
||||
begin
|
||||
if (FSize>0) and assigned(FOnProgress) Then
|
||||
FOnProgress(self,100 * ( BytesNow / FSize));
|
||||
inc(NextMark,OnBytes);
|
||||
end;
|
||||
Until (Count=0);
|
||||
Finally
|
||||
C.Free;
|
||||
@ -685,6 +702,8 @@ begin
|
||||
Finally
|
||||
FreeMem(Buf);
|
||||
end;
|
||||
if assigned(FOnProgress) then
|
||||
fOnProgress(self,100.0);
|
||||
Crc32Val:=NOT Crc32Val;
|
||||
end;
|
||||
|
||||
@ -709,9 +728,22 @@ Var
|
||||
Buf : PByte;
|
||||
I,Count : Integer;
|
||||
C : TDeCompressionStream;
|
||||
BytesNow : Integer;
|
||||
NextMark : Integer;
|
||||
OnBytes : Integer;
|
||||
FSize : Integer;
|
||||
|
||||
begin
|
||||
CRC32Val:=$FFFFFFFF;
|
||||
if FOnPercent = 0 then
|
||||
FOnPercent := 1;
|
||||
OnBytes:=Round((FInFile.Size * FOnPercent) / 100);
|
||||
BytesNow:=0; NextMark := OnBytes;
|
||||
FSize:=FInfile.Size;
|
||||
|
||||
If Assigned(FOnProgress) then
|
||||
fOnProgress(self,0);
|
||||
|
||||
Buf:=GetMem(FBufferSize);
|
||||
Try
|
||||
C:=TDeCompressionStream.Create(FInFile,True);
|
||||
@ -721,6 +753,13 @@ begin
|
||||
For I:=0 to Count-1 do
|
||||
UpdC32(Buf[i]);
|
||||
FOutFile.Write(Buf^,Count);
|
||||
inc(BytesNow,Count);
|
||||
if BytesNow>NextMark Then
|
||||
begin
|
||||
if (FSize>0) and assigned(FOnProgress) Then
|
||||
FOnProgress(self,100 * ( BytesNow / FSize));
|
||||
inc(NextMark,OnBytes);
|
||||
end;
|
||||
Until (Count=0);
|
||||
Finally
|
||||
C.Free;
|
||||
@ -728,6 +767,8 @@ begin
|
||||
Finally
|
||||
FreeMem(Buf);
|
||||
end;
|
||||
if assigned(FOnProgress) then
|
||||
fOnProgress(self,100.0);
|
||||
Crc32Val:=NOT Crc32Val;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user