public static Zip64ExtraField GetAndRemoveZip64Block(List <ZipGenericExtraField> extraFields, bool readUncompressedSize, bool readCompressedSize, bool readLocalHeaderOffset, bool readStartDiskNumber) { Zip64ExtraField zip64Block = new Zip64ExtraField(); zip64Block._compressedSize = new long?(); zip64Block._uncompressedSize = new long?(); zip64Block._localHeaderOffset = new long?(); zip64Block._startDiskNumber = new int?(); List <ZipGenericExtraField> list = new List <ZipGenericExtraField>(); bool flag = false; foreach (ZipGenericExtraField extraField in extraFields) { if ((int)extraField.Tag == 1) { list.Add(extraField); if (!flag && Zip64ExtraField.TryGetZip64BlockFromGenericExtraField(extraField, readUncompressedSize, readCompressedSize, readLocalHeaderOffset, readStartDiskNumber, out zip64Block)) { flag = true; } } } foreach (ZipGenericExtraField genericExtraField in list) { extraFields.Remove(genericExtraField); } return(zip64Block); }
public static Zip64ExtraField GetJustZip64Block(Stream extraFieldStream, bool readUncompressedSize, bool readCompressedSize, bool readLocalHeaderOffset, bool readStartDiskNumber) { using (BinaryReader reader = new BinaryReader(extraFieldStream)) { ZipGenericExtraField field; while (ZipGenericExtraField.TryReadBlock(reader, extraFieldStream.Length, out field)) { Zip64ExtraField zip64Block; if (Zip64ExtraField.TryGetZip64BlockFromGenericExtraField(field, readUncompressedSize, readCompressedSize, readLocalHeaderOffset, readStartDiskNumber, out zip64Block)) { return(zip64Block); } } } return(new Zip64ExtraField() { _compressedSize = new long?(), _uncompressedSize = new long?(), _localHeaderOffset = new long?(), _startDiskNumber = new int?() }); }