Sample code for 30+ languages & platforms
Dart

Iterate Through Matching ZIP Entries Using EntryMatching and ZipEntry.GetNextMatch

See more Zip Examples

This example demonstrates how to iterate through ZIP entries matching a wildcard pattern using:

  • Zip.EntryMatching to obtain the first matching entry
  • ZipEntry.GetNextMatch to advance to subsequent matching entries

The wildcard character * matches zero or more characters. Matching is performed against the full stored ZIP entry path.

The example searches for all entries beneath the docs/ directory.

Suppose the ZIP archive contains:

docs/
docs/readme.txt
docs/manual.pdf
docs/sub1/notes.txt
images/logo.png
hello.txt

The wildcard pattern:

docs/*

Matches:

docs/
docs/readme.txt
docs/manual.pdf
docs/sub1/notes.txt

Note that ZIP archives may optionally contain separate directory entries. Therefore, the first matching entry may be the directory entry docs/ rather than a file entry.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  var success = false;

  final zip = CkZip();

  // Open an existing ZIP archive.
  success = true;
  try {
    zip.openZip('c:/temp/sample.zip');
  } on ChilkatException {
    success = false;
  }
  if (!success) {
    print(zip.lastErrorText);
    return;
  }

  // ------------------------------------------------------------
  // Find the first ZIP entry matching the wildcard pattern:
  // 
  //     docs/*
  // 
  // Matching is performed against the full stored ZIP path.
  // 
  final entry = CkZipEntry();

  success = true;
  try {
    zip.entryMatching('docs/*', entry);
  } on ChilkatException {
    success = false;
  }
  if (!success) {
    print('No matching entries found.');
    zip.closeZip();
    return;
  }

  // ------------------------------------------------------------
  // Iterate through all matching entries.
  // 
  // GetNextMatch updates the same ZipEntry object so that
  // it represents the next matching entry.
  // 
  while (success) {
    if (entry.isDirectory) {
      print('[Directory] ${entry.fileName}');
    } else {
      print('[File] ${entry.fileName}');
    }

    // Advance to the next matching entry.
    success = true;
    try {
      entry.getNextMatch('docs/*');
    } on ChilkatException {
      success = false;
    }
  }

  zip.closeZip();

  print('Done.');
}