Lazarus Pascal
Lazarus Pascal
Unzip a Text File Entry into a StringBuilder Using ZipEntry.UnzipToSb
See more Zip Examples
This example demonstrates how to use the ZipEntry.UnzipToSb method to inflate a text file entry directly into a StringBuilder object.
The ZIP entry is uncompressed entirely in memory and appended to the StringBuilder without creating a temporary file on disk.
This is useful when:
- Processing text files directly in memory
- Avoiding temporary filesystem files
- Reading configuration files, JSON, XML, CSV, or source code from ZIP archives
- Automatically converting line endings while inflating the text
The srcCharset argument specifies how the uncompressed bytes should be interpreted, such as:
-
utf-8 -
utf-16 -
windows-1252
The lineEndingBehavior argument controls line-ending conversion:
-
0— Leave line endings unchanged -
1— Convert all line endings to bare LF -
2— Convert all line endings to CRLF
Suppose the ZIP archive contains:
config/settings.json The example inflates the JSON file directly into a StringBuilder.
Chilkat Lazarus Pascal Downloads
program ChilkatDemo;
// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SysUtils,
CkDllLoader,
Chilkat.ZipEntry,
Chilkat.StringBuilder,
Chilkat.Zip;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
zip: TZip;
entry: TZipEntry;
sb: TStringBuilder;
lineEndingBehavior: Integer;
srcCharset: string;
begin
success := False;
zip := TZip.Create;
// Open an existing ZIP archive.
success := zip.OpenZip('qa_data/zips/configFiles.zip');
if (success = False) then
begin
WriteLn(zip.LastErrorText);
Exit;
end;
// Locate the JSON file entry within the ZIP archive.
entry := TZipEntry.Create;
success := zip.EntryOf('config/settings.json',entry);
if (success = False) then
begin
WriteLn('ZIP entry not found.');
zip.CloseZip();
Exit;
end;
// ------------------------------------------------------------
// Inflate the ZIP entry directly into a StringBuilder.
//
// The uncompressed text is appended to the StringBuilder.
//
sb := TStringBuilder.Create;
// Leave line endings unchanged.
lineEndingBehavior := 0;
// Interpret the uncompressed bytes as UTF-8 text.
srcCharset := 'utf-8';
success := entry.UnzipToSb(lineEndingBehavior,srcCharset,sb);
if (success = False) then
begin
WriteLn(entry.LastErrorText);
Exit;
end;
WriteLn('Uncompressed text:');
WriteLn('');
WriteLn(sb.GetAsString());
zip.CloseZip();
WriteLn('Done.');
zip.Free;
entry.Free;
sb.Free;
end;
// ---------------------------------------------------------------------------
begin
try
RunDemo;
except
on E: Exception do
WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
end;
WriteLn;
{$IFDEF MSWINDOWS}
WriteLn('Press Enter to exit...');
ReadLn;
{$ENDIF}
end.