7zip压缩网络流

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

我如何使用7zip与.net?

我知道7zip是免费的,并且他们在c#中有源代码但由于某种原因它在c#上非常慢,所以我宁愿调用因性能原因安装7zip时出现的dll 7z.dll 。 所以我能够在7z.dll中编组和调用方法的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的一个问题:

在此处输入图像描述

您是否考虑过一个备用库 – 一个甚至不需要安装/可用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) 

感谢您在这里考虑表演! 我认为太多人会做你想要避免的事情:压缩到临时文件,然后用临时文件做一些事情。