DotNetZip在文件上扼流圈

时间:2011-08-30 14:50:13

标签: c# zip compression dotnetzip

有人会解释为什么DotNetZip会在文件上旋转它的轮子吗?我有这个受版权保护且不可分发的文件,不会被压缩。我可以拿一个早期版本的文件,或者稍后一个版本,它会拉链。

zip实用程序不应该关心某个版本,因此我假设它认为该文件已损坏。我该如何调试此问题?当我单步执行代码时,问题不会发生,但如果我让它运行,它会在保存此特定文件时停止。这是图书馆的代码:

ICollection<ZipEntry> c = (SortEntriesBeforeSaving) ? EntriesSorted : Entries;
foreach (ZipEntry e in c) // _entries.Values
{
    OnSaveEntry(n, e, true);
    e.Write(WriteStream);
    if (_saveOperationCanceled)
        break;

    n++;
    OnSaveEntry(n, e, false);
    if (_saveOperationCanceled)
        break;

    // Some entries can be skipped during the save.
    if (e.IncludedInMostRecentSave)
        thisSaveUsedZip64 |= e.OutputUsedZip64.Value;
}

如果我在该循环中放置一个断点并让它单独保存每个文件,那么当它看到“坏文件”时它不会窒息。

有什么想法?我将不胜感激!

编辑1:

为了清楚起见,当我说“扼流圈”时,我的意思是它会进入某种无限循环,并且不会继续压缩“坏文件”并转移到其余部分。此外,这是一个被很多人使用的文件,所以它不应该被破坏。

编辑2:

我把它缩小到以下几点:

zip.CompressionMethod = CompressionMethod.Deflate;

该压缩模式会导致此问题。我很确定这是某种错误。另一种压缩方法Bzip2非常慢。我不确定如何解决这个问题。

编辑3:

确实,DotNetZip非常奇怪。我通过调整压缩级别来修复它:

zip.CompressionLevel = CompressionLevel.Default;

这解决了这个问题,但几分钟后我就回来了,它不再工作了。 Bzip2仍然有效,但就像我之前说过的那样,速度非常慢。所以,我开始搞乱ZipFile API的其他部分,我添加了这个:

zip.CodecBufferSize = 10240000;

这使它现在起作用。我不知道这个bug究竟是什么?

0 个答案:

没有答案