什么可能导致ICSharpCode.SharpZipLib在删除时失败 - > CommitUpdate错误'无法复制字节...“?

时间:2018-06-07 11:55:57

标签: c# .net stream sharpziplib

使用ICSharpCode.SharpZipLib通过删除压缩内容中的特定文档来更新zip文件,使用以下代码:

protected async Task updateZip()
{
    var fragment = "resources/graphics.json";

    ZipFile zipFile = null;
    using (var memoryStream = new MemoryStream())
    {
        using (var stream = await resourceClient.GetBlob("files/pageengine/document.epl")) // .epl is a zip format.
        {
            await stream.CopyToAsync(memoryStream);
            memoryStream.Position = 0;
            zipFile = new ZipFile(memoryStream);
        }

        memoryStream.Position = 0;

        zipFile.BeginUpdate();
        if (zipFile.FindEntry(fragment, true) != -1) zipFile.Delete(fragment);
        zipFile.CommitUpdate(); // FAILS HERE
        zipFile.IsStreamOwner = false;
    }
    // Etc. to save zip file.
}

...我们收到以下错误:

  

System.ApplicationException     的HResult = 0x80131600     消息=内部服务器错误 - {“消息”:“发生错误。”,“ExceptionMessage”:“无法复制预期的字节33734读取13013”,“ExceptionType”:“ICSharpCode.SharpZipLib.Zip.ZipException”,“StackTrace “:” 在ICSharpCode.SharpZipLib.Zip.ZipFile.CopyEntryDataDirect(ZipUpdate更新,流流,布尔updateCrc,Int64的&安培; destinationPosition,Int64的&安培; sourcePosition个)\ r \ n在ICSharpCode.SharpZipLib.Zip.ZipFile.CopyEntryDirect(的ZipFile WORKFILE,ZipUpdate ICSharpCode.SharpZipLib.Zip.ZipFile.RunUpdates()\ r \ n,ICSharpCode.SharpZipLib.Zip.ZipFile.CommitUpdate()\ r \ n

中的更新,Int64和目标位置)\ r \ n

我们尝试了memoryStream.Capacity = memoryStream.Length,但这没有用。错误消息中的任何字节长度都不匹配流容量或其长度。

可能导致此问题的原因是什么?

.NET 4.7; Latest Stable SharpZipLib from Nuget v0.86.0

0 个答案:

没有答案