-->

7zip的压缩网络流(7zip compress network stream)

2019-06-28 00:15发布

我会想通过网络发送之前压缩文件。 我认为最好的办法是7zip的,因为它是免费和开源。

我如何使用7zip的使用.NET?

我知道, 7zip是免费的,他们在C#源代码,但由于某种原因,它是C#的速度很慢,所以我宁愿调用DLL 7z.dll出于性能的考虑安装7zip的时谈到。 所以,我能够eassily元帅和调用方法的方式7z.dll是叫库的帮助sevenzipsharp 。 例如添加该DLL到我的项目将使我这样做:

        // if you installed 7zip 64bit version then make sure you change plataform target
        // like on the picture I showed above!
        SevenZip.SevenZipCompressor.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");

        var stream = System.IO.File.OpenRead(@"SomeFileToCompress.txt");
        var outputStream = System.IO.File.Create("Output.7z");

        SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor();
        compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2;
        compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra;
        compressor.CompressStream(stream, outputStream);

这就是我如何使用C#中7zip的。

现在的问题是:

我会想通过网络发送一个压缩文件。 我知道我可以先压缩它,然后将其发送。 该文件是4GB,所以我将不得不等待很长的时间才能压缩。 我将硬盘驱动器上浪费了大量的空间。 然后,我将最终能够发送。 我认为这是复杂的。 我不知道怎么会可以发送同时它被压缩的文件。


这似乎是与SevenZipSharp一个问题:

Answer 1:

你有没有考虑一个备用库 - 一个甚至不要求安装的7-Zip /可用?

从张贴在描述http://dotnetzip.codeplex.com/ :

从流内容创建zip文件,保存到一个流,提取到一个流,从流中读取

与7-ZIP,DotNetZip设计与C#/ .NET工作。

的大量例子-包括流媒体,可在http://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples 。

另一种选择是使用7-ZIP命令行版本(7z.exe),并写入/从输入/输出标准读取。 这将允许您使用7-Zip文件格式,同时保持所有的原生代码的核心工作(虽然有可能不会有太大的一个显著的差异)。

回首SevenZipSharp:

自0.29版本,流媒体支持。

看着http://sevenzipsharp.codeplex.com/SourceControl/changeset/view/59007#364711 :

似乎你想要这个方法:

public void CompressStream(Stream inStream, Stream outStream)

谢谢你在这里考虑的性能! 我想太多的人会做你试图避免什么:压缩到一个临时文件,然后做临时文件的东西。



Answer 2:

CompressStream抛出异常。 我的代码如下:

    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();

异常消息:消息:试验方法Test7zip.UnitTest1.TestCompress抛出异常:SevenZip.SevenZipException:执行失败归因于SevenZipSharp的bug。 请有关报告给http://sevenzipsharp.codeplex.com/WorkItem/List.aspx ,发布版本号和附加档案



文章来源: 7zip compress network stream