Что может привести к сбою ICSharpCode.SharpZipLib при удалении -> CommitUpdate с ошибкой «Не удалось скопировать байты ...»? - PullRequest
0 голосов
/ 07 июня 2018

Используя 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 Сообщение = Внутренняя ошибка сервера - {"Message": "Произошла ошибка.", "ExceptionMessage": "Не удалось скопировать ожидаемые байты 33734, чтение 13013", "ExceptionType": "ICSharpCode.SharpZipLib.Zip.ZipException "," StackTrace ":" в ICSharpCode.SharpZipLib.Zip.ZipFile.CopyEntryDataDirect (обновление ZipUpdate, потоковый поток, логическое updateCrc, Int64 & destinationPosition, Int64 & sourcePhib.hZZhh)ZipFile.CopyEntryDirect (рабочий файл ZipFile, обновление ZipUpdate, Int64 и destinationPosition) \ r \ n в ICSharpCode.SharpZipLib.Zip.ZipFile.RunUpdates () \ r \ n в ICSharpCode.SharpZipLib.Z. * zip (zP)1008 *

Мы пробовали memoryStream.Capacity = memoryStream.Length, но это не помогает. Ни одна из длин байтов в сообщении об ошибке не соответствует ни одному из потоков.r его длина.

Что может быть причиной этой проблемы?

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

...