private PackageEntryEntity Initialize(PackageEntryEntity entity, CentralDirectoryHeader metadata) { entity.Comment = metadata.Comment; entity.CommentSize = metadata.CommentSize; entity.CompressedSize = metadata.CompressedSize; entity.CompressionMethod = metadata.CompressionMethod; entity.Crc32 = metadata.Crc32; entity.DiskNumberStart = metadata.DiskNumberStart; entity.ExternalAttributes = metadata.ExternalAttributes; entity.ExtraField = metadata.ExtraField; entity.ExtraFieldSize = metadata.ExtraFieldSize; entity.Flags = metadata.Flags; entity.InternalAttributes = metadata.InternalAttributes; entity.LastModifiedDate = metadata.LastModifiedDate; entity.LastModifiedTime = metadata.LastModifiedTime; entity.LocalHeaderOffset = metadata.LocalHeaderOffset; entity.Name = metadata.Name; entity.NameSize = metadata.NameSize; entity.UncompressedSize = metadata.UncompressedSize; entity.VersionMadeBy = metadata.VersionMadeBy; entity.VersionToExtract = metadata.VersionToExtract; return(entity); }
private PackageArchiveEntity Initialize(PackageArchiveEntity entity, PackageArchiveMetadata metadata) { entity.Size = metadata.Size; entity.EntryCount = metadata.ZipDirectory.Entries.Count; entity.CentralDirectorySize = metadata.ZipDirectory.CentralDirectorySize; entity.Comment = metadata.ZipDirectory.Comment; entity.CommentSize = metadata.ZipDirectory.CommentSize; entity.DiskWithStartOfCentralDirectory = metadata.ZipDirectory.DiskWithStartOfCentralDirectory; entity.EntriesForWholeCentralDirectory = metadata.ZipDirectory.EntriesForWholeCentralDirectory; entity.EntriesInThisDisk = metadata.ZipDirectory.EntriesInThisDisk; entity.NumberOfThisDisk = metadata.ZipDirectory.NumberOfThisDisk; entity.OffsetAfterEndOfCentralDirectory = metadata.ZipDirectory.OffsetAfterEndOfCentralDirectory; entity.OffsetOfCentralDirectory = metadata.ZipDirectory.OffsetOfCentralDirectory; entity.Zip64CentralDirectorySize = metadata.ZipDirectory.Zip64?.CentralDirectorySize; entity.Zip64DiskWithStartOfCentralDirectory = metadata.ZipDirectory.Zip64?.DiskWithStartOfCentralDirectory; entity.Zip64DiskWithStartOfEndOfCentralDirectory = metadata.ZipDirectory.Zip64?.DiskWithStartOfEndOfCentralDirectory; entity.Zip64EndOfCentralDirectoryOffset = metadata.ZipDirectory.Zip64?.EndOfCentralDirectoryOffset; entity.Zip64EntriesForWholeCentralDirectory = metadata.ZipDirectory.Zip64?.EntriesForWholeCentralDirectory; entity.Zip64EntriesInThisDisk = metadata.ZipDirectory.Zip64?.EntriesInThisDisk; entity.Zip64NumberOfThisDisk = metadata.ZipDirectory.Zip64?.NumberOfThisDisk; entity.Zip64OffsetAfterEndOfCentralDirectoryLocator = metadata.ZipDirectory.Zip64?.OffsetAfterEndOfCentralDirectoryLocator; entity.Zip64OffsetOfCentralDirectory = metadata.ZipDirectory.Zip64?.OffsetOfCentralDirectory; entity.Zip64SizeOfCentralDirectoryRecord = metadata.ZipDirectory.Zip64?.SizeOfCentralDirectoryRecord; entity.Zip64TotalNumberOfDisks = metadata.ZipDirectory.Zip64?.TotalNumberOfDisks; entity.Zip64VersionMadeBy = metadata.ZipDirectory.Zip64?.VersionMadeBy; entity.Zip64VersionToExtract = metadata.ZipDirectory.Zip64?.VersionToExtract; // Make sure the entries are sorted by index. if (entity.PackageEntries == null) { entity.PackageEntries = new List <PackageEntryEntity>(); } entity.PackageEntries.Sort((a, b) => a.Index.CompareTo(b.Index)); for (var index = 0; index < metadata.ZipDirectory.Entries.Count; index++) { var entryMetadata = metadata.ZipDirectory.Entries[index]; PackageEntryEntity entryEntity; if (index < entity.PackageEntries.Count) { entryEntity = entity.PackageEntries[index]; if (entryEntity.Index != (ulong)index) { throw new InvalidOperationException("One of the package archive entries seems to have an incorrect index."); } } else if (index == entity.PackageEntries.Count) { entryEntity = new PackageEntryEntity { PackageArchive = entity, Index = (ulong)index, }; entity.PackageEntries.Add(entryEntity); } else { throw new InvalidOperationException("The list of existing package entries should have grown."); } Initialize(entryEntity, entryMetadata); } entity .PackageEntries .RemoveAll(x => x.Index >= (ulong)metadata.ZipDirectory.Entries.Count); return(entity); }