             isDirectory = isDirectory || ((centralDirectoryStructure.externalFileAttributes >> 4) == 0x01)
             fallthrough
         default:
-            //for all other OSes we can only guess based on the directory suffix char
+            // for all other OSes we can only guess based on the directory suffix char
             return isDirectory ? .directory : .file
         }
+    }
+    /// Returns the size of the receiver's compressed data.
+    public var compressedSize: Int {
+        return Int(dataDescriptor?.compressedSize ?? localFileHeader.compressedSize)
+    }
+    /// Returns the size of the receiver's uncompressed data.
+    public var uncompressedSize: Int {
+        return Int(dataDescriptor?.uncompressedSize ?? localFileHeader.uncompressedSize)
     }
     var dataOffset: Int {
         var dataOffset = Int(self.centralDirectoryStructure.relativeOffsetOfLocalHeader)

        let fileNameData: Data
        let extraFieldData: Data
        let fileCommentData: Data
        var usesDataDescriptor: Bool {
            return (self.generalPurposeBitFlag & (1 << 3 )) != 0
        }
        var isZIP64: Bool {
            return self.versionNeededToExtract >= 45
        }
        var isEncrypted: Bool {
            return (self.generalPurposeBitFlag & (1 << 0)) != 0
        }
    }

    /// Returns the `path` of the receiver within a ZIP `Archive`.

        self.externalFileAttributes = data.scanValue(start: 38)
        self.relativeOffsetOfLocalHeader = data.scanValue(start: 42)
        let additionalDataLength = Int(self.fileNameLength + self.extraFieldLength + self.fileCommentLength)
        guard let additionalData = try? provider(additionalDataLength) else { return nil }
        guard additionalData.count == additionalDataLength else { return nil }
        var subRangeStart = 0
        var subRangeEnd = Int(self.fileNameLength)
