Hello again,
Look at the LoadFromStream method of my ParallelVarFiler source code here:
http://pages.videotron.com/aminer/Here it is:
==
function TParallelVarFiler.LoadFromStream(Stream : TStream):boolean;
var
VR : PScwVarRecord;
str:string;
a:integer;
delbit:byte;
pos:integer;
Begin
result:=true;
Clear;
Try
While Stream.Position < Stream.Size do
Begin
pos:=stream.position;
New(VR);
Stream.Read(delbit, SizeOf(byte));
Stream.Read(a, SizeOf(integer)); // Name length
SetLength(str, a); // Get memory to the Name
Stream.Read(Pointer(str)^, a); // Name
Stream.Read(VR^.T, SizeOf(VR^.T)); // Variable Type
if (Stream.size-Stream.position)<sizeof(VR^.SL)
then
begin
dispose(VR);
setlength(str,0);
Stream.size:=pos;
result:=false;
exit;
end;
Stream.Read(VR^.SL, SizeOf(VR^.SL)); // Variable Length
if delbit=1
then
begin
if (Stream.size-Stream.position)<VR^.SL
then
begin
dispose(VR);
setlength(str,0);
Stream.size:=pos;
result:=false;
exit;
end;
SetLength(VR^.S, VR^.SL); // Get memory to the variable
Stream.Read(Pointer(VR^.S)^, VR^.SL); // Variable
hash1.add(str,pointer(vr));
end
else
begin
Stream.position:=Stream.position+VR^.SL;
setLength(str, 0);
dispose(VR);
end;
End;
Except
setlength(str,0);
VR^.s:='';
dispose(VR);
result:=false;
//Stream.size:=pos;
Clear;
End;
End;
==
As you will notice this LoadFromStream() method brings Fault toleracy to ParallelVarFiler , so it's fault tolerant to power failure etc. and i think that the zipfile component must use something like that, cause Fault tolerancy is very important.
Thank you,
Amine Moulay Ramdane.