public void ZipFileCloseFake(ulong fileOffset, out byte[] centralDir) { centralDir = null; if (ZipOpen != ZipOpenType.OpenFakeWrite) { return; } _zip64 = false; bool lTrrntzip = true; _zipFs = new MemoryStream(); _centerDirStart = fileOffset; if (_centerDirStart >= 0xffffffff) { _zip64 = true; } CrcCalculatorStream crcCs = new CrcCalculatorStream(_zipFs, true); foreach (LocalFile t in _localFiles) { t.CenteralDirectoryWrite(crcCs); _zip64 |= t.Zip64; lTrrntzip &= t.TrrntZip; } crcCs.Flush(); crcCs.Close(); _centerDirSize = (ulong)_zipFs.Position; _fileComment = lTrrntzip ? ZipUtils.GetBytes("TORRENTZIPPED-" + crcCs.Crc.ToString("X8")) : new byte[0]; ZipStatus = lTrrntzip ? ZipStatus.TrrntZip : ZipStatus.None; crcCs.Dispose(); if (_zip64) { _endOfCenterDir64 = fileOffset + (ulong)_zipFs.Position; Zip64EndOfCentralDirWrite(); Zip64EndOfCentralDirectoryLocatorWrite(); } EndOfCentralDirWrite(); centralDir = ((MemoryStream)_zipFs).ToArray(); _zipFs.Close(); _zipFs.Dispose(); ZipOpen = ZipOpenType.Closed; }
private void zipFileCloseWrite() { _zip64 = false; bool lTrrntzip = true; _centerDirStart = (ulong)_zipFs.Position; using (CrcCalculatorStream crcCs = new CrcCalculatorStream(_zipFs, true)) { foreach (LocalFile t in _localFiles) { t.CenteralDirectoryWrite(crcCs); _zip64 |= t.Zip64; lTrrntzip &= t.TrrntZip; } crcCs.Flush(); crcCs.Close(); _centerDirSize = (ulong)_zipFs.Position - _centerDirStart; _fileComment = lTrrntzip ? ZipUtils.GetBytes("TORRENTZIPPED-" + crcCs.Crc.ToString("X8")) : new byte[0]; ZipStatus = lTrrntzip ? ZipStatus.TrrntZip : ZipStatus.None; } _zip64 |= _centerDirStart >= 0xffffffff; _zip64 |= _centerDirSize >= 0xffffffff; _zip64 |= _localFiles.Count >= 0xffff; if (_zip64) { _endOfCenterDir64 = (ulong)_zipFs.Position; Zip64EndOfCentralDirWrite(); Zip64EndOfCentralDirectoryLocatorWrite(); } EndOfCentralDirWrite(); _zipFs.SetLength(_zipFs.Position); _zipFs.Flush(); _zipFs.Close(); _zipFs.Dispose(); _zipFileInfo = new FileInfo(_zipFileInfo.FullName); ZipOpen = ZipOpenType.Closed; }