首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SevenZipSharp CompressStreamDictionary误差

SevenZipSharp CompressStreamDictionary误差
EN

Stack Overflow用户
提问于 2014-12-05 16:07:12
回答 1查看 2.4K关注 0票数 1

小于16 MB的内存流运行良好。但是,当压缩大小超过16 is的内存流时,我会得到一个错误(HResult = -2146233088)。我怎么才能让它起作用?

我使用SevenZipSharp.dll版本0.64.3890.29348

代码语言:javascript
复制
SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor();
 compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2;
 compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra;
 compressor.EncryptHeaders = false;

 using (Stream output = File.Open(sFileName, FileMode.Create))
 {
     ms.Position = 0;
     compressor.CompressStreamDictionary(new Dictionary<string, Stream> { { zipFileName, ms } }, output, "");
 }

由于SevenZipSharp中的错误,执行失败了。请向http://sevenzipsharp.codeplex.com/WorkItem/List.aspx报告,张贴发行编号,并附上档案。

错误堆栈跟踪:

bei SevenZip.SevenZipBase.ThrowException(CallbackBase处理程序,Exception[] e) bei SevenZip.SevenZipBase.CheckedExecute(Int32 SevenZip.SevenZipBase.CheckedExecute,String message,CallbackBase处理程序) bei SevenZip.SevenZipCompressor.CompressStreamDictionary(Dictionary`2 streamDictionary,Stream archiveStream,String password) bei frmConfigSystem.bwExport_DoWork(对象发送方,DoWorkEventArgs e)

EN

回答 1

Stack Overflow用户

发布于 2015-03-18 10:25:56

我也有同样的问题,就这样解决了:

在这里下载这个七叉:https://github.com/StevenBonePgh/SevenZipSharp --这是一个最新版本,有很多错误修复,但是CompressStreamDictionary错误仍然存在(直到今天)。

若要解决内存问题,必须指定较低的字典大小。要压缩的文件越大,磁盘的大小就越小。这是这样做的:

代码语言:javascript
复制
szc.CustomParameters.Add("d", 22);

它似乎26是默认值。我做了一些测试,并做了一个小公式来使字典大小与流大小相适应:

代码语言:javascript
复制
                if (!Environment.Is64BitProcess)
                {
                    if (stream.Length>=16*1024*1024)
                    {
                        int sizeG = (int)(stream.Length / 1024 / 1024 / 1024);
                        int param;

                        // from 16MB to 2GB: use 23
                        if (sizeG <= 2)
                        {
                            param = 23;
                        }
                        else
                        {
                            // from 2GB : use 24 - size(GB)
                            param = Math.Max(24 - sizeG, 1);
                        }
                        szc.CustomParameters.Add("d", param.ToString());
                    }
                }

我用16 it到8GB的文件进行了测试,没有错误。我将把代码提交给七位作者,以便将其包含在源代码中。

旧的答案:

Afaik,这个项目是废弃的。在多线程环境中使用它也有一些错误,下面的解决方案似乎可以改进一些事情:

下载这个补丁并应用于SevenZipSharp源代码。这将使它完全了解多线程。

您还可以尝试用在http://www.7-zip.org/download.html上可下载的官方库替换7 official包提供的7zip库

注意:您将在下载的存档中找到7za.dll,这是只支持.7z格式的轻型库版本(没有zip.)。

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

https://stackoverflow.com/questions/27320021

复制
相关文章

相似问题

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