ZipDirectory.read constructor

ZipDirectory.read(
  1. InputStreamBase input, {
  2. String? password,
})

Implementation

ZipDirectory.read(InputStreamBase input, {String? password}) {
  filePosition = _findEocdrSignature(input);
  input.position = filePosition;
  final signature = input.readUint32(); // ignore: unused_local_variable
  numberOfThisDisk = input.readUint16();
  diskWithTheStartOfTheCentralDirectory = input.readUint16();
  totalCentralDirectoryEntriesOnThisDisk = input.readUint16();
  totalCentralDirectoryEntries = input.readUint16();
  centralDirectorySize = input.readUint32();
  centralDirectoryOffset = input.readUint32();

  final len = input.readUint16();
  if (len > 0) {
    zipFileComment = input.readString(size: len, utf8: false);
  }

  if (centralDirectoryOffset == 0xffffffff ||
      centralDirectorySize == 0xffffffff ||
      totalCentralDirectoryEntriesOnThisDisk == 0xffff ||
      numberOfThisDisk == 0xffff) {
    _readZip64Data(input);
  }

  final dirContent =
      input.subset(centralDirectoryOffset, centralDirectorySize);

  final dirStream = InputStream(dirContent.toUint8List());
  while (!dirStream.isEOS) {
    final fileSig = dirStream.readUint32();
    if (fileSig != ZipFileHeader.SIGNATURE) {
      break;
    }
    fileHeaders.add(ZipFileHeader(dirStream));
  }

  for (final file in fileHeaders) {
    file.readLocalFileHeader(input, password);
  }
}