public ZipReturn ZipFileCreate(string newFilename, SevenZipCompressType compressOutput, int dictionarySize = 1 << 24, int numFastBytes = 64) { if (ZipOpen != ZipOpenType.Closed) { return(ZipReturn.ZipFileAlreadyOpen); } CompressUtils.CreateDirForFile(newFilename); _zipFileInfo = new FileInfo(newFilename); int errorCode = FileStream.OpenFileWrite(newFilename, out _zipFs); if (errorCode != 0) { ZipFileClose(); return(ZipReturn.ZipErrorOpeningFile); } ZipOpen = ZipOpenType.OpenWrite; _signatureHeader = new SignatureHeader(); _header = new Header(); using (BinaryWriter bw = new(_zipFs, Encoding.UTF8, true)) { _signatureHeader.Write(bw); } _baseOffset = _zipFs.Position; _packedOutStreams = new List <outStreams>(); _compType = compressOutput; #if solid outStreams newStream = new() { packedStart = (ulong)_zipFs.Position, compType = compressOutput, packedSize = 0, unpackedStreams = new List <UnpackedStreamInfo>() }; switch (compressOutput) { case SevenZipCompressType.lzma: LzmaEncoderProperties ep = new(true, dictionarySize, numFastBytes); LzmaStream lzs = new(ep, false, _zipFs); newStream.Method = new byte[] { 3, 1, 1 }; newStream.Properties = lzs.Properties; _compressStream = lzs; break; case SevenZipCompressType.zstd: ZstdSharp.CompressionStream zss = new(_zipFs, 19); newStream.Method = new byte[] { 4, 247, 17, 1 }; newStream.Properties = new byte[] { 1, 5, 19, 0, 0 }; _compressStream = zss; break; case SevenZipCompressType.uncompressed: newStream.Method = new byte[] { 0 }; newStream.Properties = null; _compressStream = _zipFs; break; } _packedOutStreams.Add(newStream); #endif return(ZipReturn.ZipGood); }
public ZipReturn ZipFileCreateFromUncompressedSize(string newFilename, SevenZipCompressType ctype, ulong unCompressedSize) { return(ZipFileCreate(newFilename, ctype, GetDictionarySizeFromUncompressedSize(unCompressedSize))); }