Ejemplo n.º 1
0
        public ZipReturn ZipFileCreateFromUncompressedSize(string newFilename, sevenZipCompressType ctype, ulong unCompressedSize)
        {
            if (ctype == sevenZipCompressType.zstd)
            {
                if (!supportZstd)
                {
                    ctype = sevenZipCompressType.lzma;
                }
            }

            return(ZipFileCreate(newFilename, ctype, GetDictionarySizeFromUncompressedSize(unCompressedSize)));
        }
Ejemplo n.º 2
0
        public ZipReturn ZipFileCreate(string newFilename, sevenZipCompressType compressOutput, int dictionarySize = 1 << 24, int numFastBytes = 64)
        {
            if (ZipOpen != ZipOpenType.Closed)
            {
                return(ZipReturn.ZipFileAlreadyOpen);
            }

            DirUtil.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 BinaryWriter(_zipFs, Encoding.UTF8, true))
            {
                _signatureHeader.Write(bw);
            }

            _baseOffset = _zipFs.Position;

            _compressed = compressOutput;

            _unpackedStreamSize = 0;
            if (_compressed == sevenZipCompressType.lzma)
            {
                LzmaEncoderProperties ep  = new LzmaEncoderProperties(true, dictionarySize, numFastBytes);
                LzmaStream            lzs = new LzmaStream(ep, false, _zipFs);
                _codeMSbytes     = lzs.Properties;
                _lzmaStream      = lzs;
                _packStreamStart = (ulong)_zipFs.Position;
            }
            else if (_compressed == sevenZipCompressType.zstd)
            {
                ZstandardStream zss = new ZstandardStream(_zipFs, 18, true);
                _codeMSbytes     = new byte[] { 1, 4, 18, 0, 0 };
                _lzmaStream      = zss;
                _packStreamStart = (ulong)_zipFs.Position;
            }
            return(ZipReturn.ZipGood);
        }