7zip 压缩网络流

2023-12-04

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

如何将 7zip 与 .net 一起使用?

我知道7zip是免费的,并且他们有 C# 的源代码,但由于某种原因,它在 C# 上非常慢,所以我宁愿调用 dll7z.dll出于性能原因安装 7zip 时会出现此问题。所以我能够轻松地编组和调用方法7z.dll在名为的图书馆的帮助下七拉链锋利。例如,将该 dll 添加到我的项目中将使我能够执行以下操作:

enter image description here

        // 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 的问题:

enter image description here


您是否考虑过另一种库 - 一个甚至不需要安装/可用 7-Zip 的库?

从发布的描述来看http://dotnetzip.codeplex.com/ :

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

与 7-Zip 不同,DotNetZip 设计用于与 C# / .Net 配合使用。

大量示例 - 包括流媒体,可在 .

另一种选择是使用 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)

感谢您在这里考虑性能!我认为太多人会做您想要避免的事情:压缩到临时文件,然后对临时文件执行某些操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

7zip 压缩网络流 的相关文章

随机推荐