Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 7th, 2012  |  syntax: None  |  size: 1.63 KB  |  hits: 30  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Delphi: open a zip archive from a stream -> extract to a stream
  2. procedure ExtractToStream(FileName: WideString; Stream: TStream);
  3.        
  4. var
  5.   ZipFile: TZipFile;
  6.   DownloadedStream, DecompressionStream, MyStream: TStream;
  7.   LocalHeader: TZipHeader;
  8. ...
  9. ZipFile := TZipFile.Create;
  10. try
  11.   ZipFile.Open(DownloadedStream, zmRead);
  12.   ZipFile.Read('myzippedfile', DecompressionStream, LocalHeader);
  13.   try
  14.     MyStream.CopyFrom(DecompressionStream, DecompressionStream.Size);
  15.   finally
  16.     DecompressionStream.Free;
  17.   end;
  18. finally
  19.   ZipFile.Free;
  20. end;
  21.        
  22. program ZipTest;
  23.  
  24. {$APPTYPE CONSOLE}
  25.  
  26. uses
  27.   System.SysUtils,
  28.   System.Classes,
  29.   System.Zip;
  30.  
  31. procedure ExtractToFile(
  32.   const ZipFileName: string;
  33.   const ZippedFileIndex: Integer;
  34.   const ExtractedFileName: string
  35. );
  36. var
  37.   ZipFile: TZipFile;
  38.   DownloadedStream, DecompressionStream, OutputStream: TStream;
  39.   LocalHeader: TZipHeader;
  40. begin
  41.   DownloadedStream := TFileStream.Create(ZipFileName, fmOpenRead);
  42.   try
  43.     ZipFile := TZipFile.Create;
  44.     try
  45.       ZipFile.Open(DownloadedStream, zmRead);
  46.       ZipFile.Read(ZippedFileIndex, DecompressionStream, LocalHeader);
  47.       try
  48.         OutputStream := TFileStream.Create(ExtractedFileName, fmCreate);
  49.         try
  50.           OutputStream.CopyFrom(DecompressionStream, DecompressionStream.Size);
  51.         finally
  52.           OutputStream.Free;
  53.         end;
  54.       finally
  55.         DecompressionStream.Free;
  56.       end;
  57.     finally
  58.       ZipFile.Free;
  59.     end;
  60.   finally
  61.     DownloadedStream.Free;
  62.   end;
  63. end;
  64.  
  65. begin
  66.   try
  67.     ExtractToFile('C:desktoptest.zip', 0, 'C:desktopout.txt');
  68.   except
  69.     on E: Exception do
  70.       Writeln(E.ClassName, ': ', E.Message);
  71.   end;
  72. end.