protected override void Dispose(bool disposing) { if (disposing && !_isDisposed) { _crcSizeStream.Dispose(); // now we have size/crc info if (!_everWritten) { // write local header, no data, so we use stored _entry.WriteLocalFileHeader(isEmptyFile: true); } else { // go back and finish writing if (_entry._archive.ArchiveStream.CanSeek) { // finish writing local header if we have seek capabilities _entry.WriteCrcAndSizesInLocalHeader(_usedZip64inLH); } else { // write out data descriptor if we don't have seek capabilities _entry.WriteDataDescriptor(); } } _canWrite = false; _isDisposed = true; } base.Dispose(disposing); }