首页

解压缩文件源码(7zip)

c#

2020-9-5

using System;
using System.IO;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "你好啊 ";
            var bytes = Encoding.UTF8.GetBytes(input);

            MemoryStream inStream = new MemoryStream(bytes);
            MemoryStream outStream = new MemoryStream();
            Zip(inStream, outStream);
            outStream.Position = 0;
            bytes = new byte[outStream.Length];
            outStream.Read(bytes, 0, bytes.Length);

            string str = Convert.ToBase64String(bytes);
            Console.WriteLine($"压缩后Base64编码 {str}");

            bytes = Convert.FromBase64String(str);
            inStream = new MemoryStream(bytes);
            outStream = new MemoryStream();
            UnZip(inStream, outStream);
            outStream.Position = 0;
            var sr = new StreamReader(outStream);
            str = sr.ReadToEnd();
            Console.WriteLine($"解压后内容 {str}");

        }

        static void Zip(Stream inStream, Stream outStream)
        {
            SevenZip.Compression.LZMA.Encoder encoder = new SevenZip.Compression.LZMA.Encoder();
            encoder.WriteCoderProperties(outStream);
            Int64 fileSize = inStream.Length;
            for (int i = 0; i < 8; i  )
                outStream.WriteByte((Byte)(fileSize >> (8 * i)));

            encoder.Code(inStream, outStream, -1, -1, null);
        }
        static void Zip(string inputName, string outputName)
        {
            var inStream = new FileStream(inputName, FileMode.Open, FileAccess.Read);
            var outStream = new FileStream(outputName, FileMode.Create, FileAccess.Write);
            Zip(inStream, outStream);
        }

        static void UnZip(string inputName, string outputName)
        {
            var inStream = new FileStream(inputName, FileMode.Open, FileAccess.Read);
            var outStream = new FileStream(outputName, FileMode.Create, FileAccess.Write);
            UnZip(inStream, outStream);
        }

        static void UnZip(Stream inStream, Stream outStream)
        {
            byte[] properties = new byte[5];
            if (inStream.Read(properties, 0, 5) != 5)
                throw (new Exception("input .lzma is too short"));
            SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder();
            decoder.SetDecoderProperties(properties);

            long outSize = 0;
            for (int i = 0; i < 8; i  )
            {
                int v = inStream.ReadByte();
                if (v < 0)
                    throw (new Exception("Can't Read 1"));
                outSize |= ((long)(byte)v) << (8 * i);
            }

            long compressedSize = inStream.Length - inStream.Position;
            decoder.Code(inStream, outStream, compressedSize, outSize, null);
        }
    }
}

资源下载此资源下载价格为3D币(VIP免费),请先
资源文件列表
SevenZip-master/.gitattributes , 2518
SevenZip-master/.gitignore , 4305
SevenZip-master/.vs/SevenZip/DesignTimeBuild/.dtbcache , 299804
SevenZip-master/.vs/SevenZip/v16/.suo , 20480
SevenZip-master/.vs/SevenZip/v16/Server/sqlite3/db.lock , 0
SevenZip-master/.vs/SevenZip/v16/Server/sqlite3/storage.ide , 454656
SevenZip-master/CODE_OF_CONDUCT.md , 3210
SevenZip-master/CONTRIBUTING.md , 13
SevenZip-master/LICENSE , 1066
SevenZip-master/README.md , 133
SevenZip-master/SevenZip/bin/Debug/netstandard2.0/SevenZip.deps.json , 1423
SevenZip-master/SevenZip/bin/Debug/netstandard2.0/SevenZip.dll , 55808
SevenZip-master/SevenZip/bin/Debug/netstandard2.0/SevenZip.pdb , 36376
SevenZip-master/SevenZip/Common/CommandLineParser.cs , 6642
SevenZip-master/SevenZip/Common/CRC.cs , 1105
SevenZip-master/SevenZip/Common/InBuffer.cs , 1318
SevenZip-master/SevenZip/Common/OutBuffer.cs , 897
SevenZip-master/SevenZip/Compress/LZ/IMatchFinder.cs , 552
SevenZip-master/SevenZip/Compress/LZ/LzBinTree.cs , 9270
SevenZip-master/SevenZip/Compress/LZ/LzInWindow.cs , 3779
SevenZip-master/SevenZip/Compress/LZ/LzOutWindow.cs , 2104
SevenZip-master/SevenZip/Compress/LZMA/LzmaBase.cs , 2696
SevenZip-master/SevenZip/Compress/LZMA/LzmaDecoder.cs , 11677
SevenZip-master/SevenZip/Compress/LZMA/LzmaEncoder.cs , 43744
SevenZip-master/SevenZip/Compress/LzmaAlone/LzmaAlone.cs , 10351
SevenZip-master/SevenZip/Compress/LzmaAlone/LzmaBench.cs , 9438
SevenZip-master/SevenZip/Compress/RangeCoder/RangeCoder.cs , 3956
SevenZip-master/SevenZip/Compress/RangeCoder/RangeCoderBit.cs , 3155
SevenZip-master/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs , 3368
SevenZip-master/SevenZip/ICoder.cs , 3605
SevenZip-master/SevenZip/obj/Debug/netstandard2.0/SevenZip.AssemblyInfo.cs , 1007
SevenZip-master/SevenZip/obj/Debug/netstandard2.0/SevenZip.AssemblyInfoInputs.cache , 42
SevenZip-master/SevenZip/obj/Debug/netstandard2.0/SevenZip.assets.cache , 88
SevenZip-master/SevenZip/obj/Debug/netstandard2.0/SevenZip.csproj.CoreCompileInputs.cache , 42
SevenZip-master/SevenZip/obj/Debug/netstandard2.0/SevenZip.csproj.FileListAbsolute.txt , 731
SevenZip-master/SevenZip/obj/Debug/netstandard2.0/SevenZip.csprojAssemblyReference.cache , 82212
SevenZip-master/SevenZip/obj/Debug/netstandard2.0/SevenZip.dll , 55808
SevenZip-master/SevenZip/obj/Debug/netstandard2.0/SevenZip.pdb , 36376
SevenZip-master/SevenZip/obj/project.assets.json , 11060
SevenZip-master/SevenZip/obj/SevenZip.csproj.nuget.cache , 149
SevenZip-master/SevenZip/obj/SevenZip.csproj.nuget.dgspec.json , 1686
SevenZip-master/SevenZip/obj/SevenZip.csproj.nuget.g.props , 1167
SevenZip-master/SevenZip/obj/SevenZip.csproj.nuget.g.targets , 681
SevenZip-master/SevenZip/SevenZip.csproj , 138
SevenZip-master/SevenZip.sln , 1555
SevenZip-master/Test/obj/project.assets.json , 2131
SevenZip-master/Test/obj/Test.csproj.nuget.cache , 149
SevenZip-master/Test/obj/Test.csproj.nuget.dgspec.json , 3143
SevenZip-master/Test/obj/Test.csproj.nuget.g.props , 1167
SevenZip-master/Test/obj/Test.csproj.nuget.g.targets , 294
SevenZip-master/Test/Program.cs , 2909
SevenZip-master/Test/Test.csproj , 263
没有账号? 忘记密码?

社交账号快速登录