mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 00:59:12 +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;
|
Buf : PByte;
|
||||||
I,Count,NewCount : Integer;
|
I,Count,NewCount : Integer;
|
||||||
C : TCompressionStream;
|
C : TCompressionStream;
|
||||||
|
BytesNow : Integer;
|
||||||
|
NextMark : Integer;
|
||||||
|
OnBytes : Integer;
|
||||||
|
FSize : Integer;
|
||||||
begin
|
begin
|
||||||
CRC32Val:=$FFFFFFFF;
|
CRC32Val:=$FFFFFFFF;
|
||||||
Buf:=GetMem(FBufferSize);
|
Buf:=GetMem(FBufferSize);
|
||||||
|
if FOnPercent = 0 then
|
||||||
|
FOnPercent := 1;
|
||||||
|
OnBytes:=Round((FInFile.Size * FOnPercent) / 100);
|
||||||
|
BytesNow:=0; NextMark := OnBytes;
|
||||||
|
FSize:=FInfile.Size;
|
||||||
Try
|
Try
|
||||||
C:=TCompressionStream.Create(FCompressionLevel,FOutFile,True);
|
C:=TCompressionStream.Create(FCompressionLevel,FOutFile,True);
|
||||||
Try
|
Try
|
||||||
|
if assigned(FOnProgress) then
|
||||||
|
fOnProgress(self,0);
|
||||||
Repeat
|
Repeat
|
||||||
Count:=FInFile.Read(Buf^,FBufferSize);
|
Count:=FInFile.Read(Buf^,FBufferSize);
|
||||||
For I:=0 to Count-1 do
|
For I:=0 to Count-1 do
|
||||||
@ -678,6 +688,13 @@ begin
|
|||||||
NewCount:=Count;
|
NewCount:=Count;
|
||||||
While (NewCount>0) do
|
While (NewCount>0) do
|
||||||
NewCount:=NewCount-C.Write(Buf^,NewCount);
|
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);
|
Until (Count=0);
|
||||||
Finally
|
Finally
|
||||||
C.Free;
|
C.Free;
|
||||||
@ -685,6 +702,8 @@ begin
|
|||||||
Finally
|
Finally
|
||||||
FreeMem(Buf);
|
FreeMem(Buf);
|
||||||
end;
|
end;
|
||||||
|
if assigned(FOnProgress) then
|
||||||
|
fOnProgress(self,100.0);
|
||||||
Crc32Val:=NOT Crc32Val;
|
Crc32Val:=NOT Crc32Val;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -709,9 +728,22 @@ Var
|
|||||||
Buf : PByte;
|
Buf : PByte;
|
||||||
I,Count : Integer;
|
I,Count : Integer;
|
||||||
C : TDeCompressionStream;
|
C : TDeCompressionStream;
|
||||||
|
BytesNow : Integer;
|
||||||
|
NextMark : Integer;
|
||||||
|
OnBytes : Integer;
|
||||||
|
FSize : Integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
CRC32Val:=$FFFFFFFF;
|
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);
|
Buf:=GetMem(FBufferSize);
|
||||||
Try
|
Try
|
||||||
C:=TDeCompressionStream.Create(FInFile,True);
|
C:=TDeCompressionStream.Create(FInFile,True);
|
||||||
@ -721,6 +753,13 @@ begin
|
|||||||
For I:=0 to Count-1 do
|
For I:=0 to Count-1 do
|
||||||
UpdC32(Buf[i]);
|
UpdC32(Buf[i]);
|
||||||
FOutFile.Write(Buf^,Count);
|
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);
|
Until (Count=0);
|
||||||
Finally
|
Finally
|
||||||
C.Free;
|
C.Free;
|
||||||
@ -728,6 +767,8 @@ begin
|
|||||||
Finally
|
Finally
|
||||||
FreeMem(Buf);
|
FreeMem(Buf);
|
||||||
end;
|
end;
|
||||||
|
if assigned(FOnProgress) then
|
||||||
|
fOnProgress(self,100.0);
|
||||||
Crc32Val:=NOT Crc32Val;
|
Crc32Val:=NOT Crc32Val;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user