private void WriteDataDescriptor()
{
// data descriptor can be 32-bit or 64-bit sizes. 32-bit is more compatible, so use that if possible
// signature is optional but recommended by the spec
BinaryWriter writer = new BinaryWriter(_archive.ArchiveStream);
writer.Write(ZipLocalFileHeader.DataDescriptorSignature);
writer.Write(_crc32);
if (SizesTooLarge())
{
writer.Write(_compressedSize);
writer.Write(_uncompressedSize);
}
else
{
writer.Write((uint)_compressedSize);
writer.Write((uint)_uncompressedSize);
}
}
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); }