首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >7压缩网络流

7压缩网络流
EN

Stack Overflow用户
提问于 2012-09-08 04:40:41
回答 2查看 6K关注 0票数 3

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

我如何在.net?中使用7zip

我知道7zip是免费的,而且它们在c#中有源代码,但是由于某些原因,在c#上很慢,所以出于性能原因,我宁愿调用在安装7zip时附带的dll 7z.dll。因此,在7z.dll中轻松编组和调用方法的方法是借助名为七拉普的库。例如,将dll添加到我的项目将使我能够:

代码语言:javascript
复制
        // 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的一个问题:

EN

回答 2

Stack Overflow用户

发布于 2012-09-08 04:52:34

你有没有考虑过另一个库--一个甚至不需要安装/可用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

看来你想要这样的方法:

代码语言:javascript
复制
public void CompressStream(Stream inStream, Stream outStream)

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

票数 2
EN

Stack Overflow用户

发布于 2018-12-27 00:40:41

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

代码语言:javascript
复制
    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();

异常消息: Message: Test方法Test7zip.UnitTest1.TestCompress抛出异常: SevenZip.SevenZipException:由于SevenZipSharp中的错误,执行失败。请向http://sevenzipsharp.codeplex.com/WorkItem/List.aspx报告,张贴发行编号,并附上档案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12328068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档