Man_Without_Face
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору function ExtractFile(fname: string): string; var strl: TStringList; ms1, ms2: TMemoryStream; // rez: AnsiString; begin // rez := ''; Result := ''; strl := TStringList.Create(); ms1 := TMemoryStream.Create; try ms2 := TmemoryStream.Create; try ms1.LoadFromFile(fname); DecompressStream(ms1, ms2); strl.LoadFromStream(ms2); //debug strl.SaveToFile('c:\3.3'); // rez:=strl.Text; Result := strl.Text finally ms1.Free; end; finally ms2.Free; end; strl.Free; // ExtractFile:=rez; end; procedure DecompressStream(inpStream, outStream: Tstream); var InpBuf, OutBuf: Pointer; OutBytes, sz: Integer; begin InpBuf := nil; OutBuf := nil; sz := inpStream.Size - inpStream.Position; if sz > 0 then try GetMem(InpBuf, sz); inpStream.Read(InpBuf^, sz); Zdecompress(InpBuf, sz, OutBuf, OutBytes, 0); outStream.Write(OutBuf^, OutBytes); finally if InpBuf <> nil then FreeMem(InpBuf); if OutBuf <> nil then FreeMem(OutBuf); end; outStream.Position := 0; end; |