7zip compress network stream

前端 未结 2 1048
北恋
北恋 2021-01-06 13:13

I will like to compress a file before sending it through the network. I think the best approach is 7zip because it is free and open source.

How I use 7zip wi

相关标签:
2条回答
  • 2021-01-06 13:31

    Have you considered an alternate library - one that doesn't even require 7-Zip to be installed / available?

    From the description posted at http://dotnetzip.codeplex.com/ :

    creating zip files from stream content, saving to a stream, extracting to a stream, reading from a stream

    Unlike 7-Zip, DotNetZip is designed to work with C# / .Net.

    Plenty of examples - including streaming, are available at http://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples .

    Another option is to use the 7-Zip Command Line Version (7z.exe), and write to/read from standard in/out. This would allow you to use the 7-Zip file format, while also keeping all of the core work in native code (though there likely won't be much of a significant difference).

    Looking back at SevenZipSharp:

    Since the 0.29 release, streaming is supported.

    Looking at http://sevenzipsharp.codeplex.com/SourceControl/changeset/view/59007#364711 :

    it seems you'd want this method:

    public void CompressStream(Stream inStream, Stream outStream)
    

    Thank you for considering performance here! I think way too many people would do exactly what you're trying to avoid: compress to a temp file, then do something with the temp file.

    0 讨论(0)
  • 2021-01-06 13:55

    CompressStream threw an exception. My code is as follows:

        public void TestCompress()
        {
            string fileToCompress = @"C:\Users\gary\Downloads\BD01.DAT";
            byte[] inputBytes = File.ReadAllBytes(fileToCompress);
            var inputStream = new MemoryStream(inputBytes);
    
            byte[] zipBytes = new byte[38000000];   // this memory size is large enough.
            MemoryStream outStream = new MemoryStream(zipBytes);
    
            string compressorEnginePath = @"C:\Engine\7z.dll";
            SevenZipCompressor.SetLibraryPath(compressorEnginePath);
    
            compressor = new SevenZip.SevenZipCompressor();
            compressor.CompressionLevel = CompressionLevel.Fast;
            compressor.CompressionMethod = CompressionMethod.Lzma2;
            compressor.CompressStream(inputStream, outputStream);
    
            inputStream.Close();
            outputStream.Close();
    

    The exception messages: Message: Test method Test7zip.UnitTest1.TestCompress threw exception: SevenZip.SevenZipException: The execution has failed due to the bug in the SevenZipSharp. Please report about it to http://sevenzipsharp.codeplex.com/WorkItem/List.aspx, post the release number and attach the archive

    0 讨论(0)
提交回复
热议问题