var InFile:TFileStream; Decompressed:TDecompressBzip2Stream; OutFile:TFileStream;begin result:=false; InFile:=TFileStream.Create(SourceFile, fmOpenRead); try Decompressed:=TDecompressBzip2Stream.Create(InFile); OutFile:=TFileStream.Create(TargetFile, fmCreate); try Decompressed.CopyFrom(InFile, InFile.Size); //error occurs here. OutFile.CopyFrom(Decompressed, Decompressed.Size); result:=true; finally Decompressed.Free; OutFile.Free; end; finally InFile.Free; end;
... try Decompressed:=TDecompressBzip2Stream.Create(InFile); OutFile:=TFileStream.Create(TargetFile, fmCreate); try //Decompressed.CopyFrom(InFile, InFile.Size); //error occurs here. (Just comment it out) // Possibly here is some method from TDecompressBzip2Stream, don't know, maybe not needed OutFile.CopyFrom(Decompressed, Decompressed.Size);...
TDecompressBzip2Stream.Seek not implemented
Constructor Create(ASource : TStream);Destructor Destroy; override;function Read(var Buffer; Count: Longint): Longint; override;
If I try your code, I getQuoteTDecompressBzip2Stream.Seek not implemented
function Decompress(SourceFile, TargetFile: string; out ErrorLog: string): boolean;var InFile:TFileStream; Decompressed:TDecompressBzip2Stream; OutFile:TFileStream; Buffer: Pointer; i:integer;const buffersize=$2000;begin result:=false; InFile:=TFileStream.Create(SourceFile, fmOpenRead); try Decompressed:=TDecompressBzip2Stream.Create(InFile); OutFile:=TFileStream.Create(TargetFile, fmCreate); try GetMem(Buffer,BufferSize); repeat i:=Decompressed.Read(buffer^,BufferSize); if i>0 then OutFile.WriteBuffer(buffer^,i); until i<BufferSize; result:=true; finally Decompressed.Free; OutFile.Free; end; finally InFile.Free; end;end;
free(buffer);
Lastly:Code: [Select]free(buffer);Or there will be a memory leak