Большую часть времени этот код работает, однако, примерно в 1/3 времени он проходит около 80% пути и дает сбой. Разархивирование завершается неудачно при распаковке файлов изображений xray. (Это пронумерованные файлы без расширения файла.) Кажется, что они могут обрабатывать их большую часть времени, однако время от времени появляется рентгеновский снимок, который не удается распаковать. Когда это терпит неудачу в файле, это дает ему случайное имя файла со случайным расширением. Похоже, что он попал в комбинацию символов, которую он не понимает при распаковке.
Это особенно происходит с зашифрованными ZIP-файлами. Если они отправляют одни и те же файлы в зашифрованном виде без шифрования aes, то программа прекрасно их распаковывает.
Когда я вручную распаковываю один и тот же zip-файл с помощью приложения 7zip, я ввожу тот же пароль, и он отлично работает.
Ex. Файл должен быть: 00043 ==> Распаковка дает: 1hzcqoee.nss
Сообщение об ошибке:
Окончательный хэш не был вычислен.
Трассировка стека:
at Ionic.Zip.WinZipAesCipherStream.get_FinalAuthentication ()
at Ionic.Zip.ZipEntry.VerifyCrcAfterExtract (Int32 рассчитывается Crc32, алгоритм шифрования алгоритма шифрования, ожидается Int32 ожидаемого CRC32, Stream archiveStream, un64 сжатый размер Int64)
в Ionic.Zip.ZipEntry.ExtractToStream (Поток archiveStream, Потоковый вывод, Алгоритм шифрования алгоритма шифрования, Int32 Ожидается, Crc32)
в Ionic.Zip.ZipEntry.InternalExtractToBaseDir (строковый baseDir, строковый пароль, ZipContainer zipContainer, ZipEntrySource zipEntrySource, строковый fileName)
at Ionic.Zip.ZipFile._InternalExtractAll (путь строки, логическое значение overrideExtractExistingProperty)
в RHASystem64.ProcessNewVisitUpload.ExtractZip (String zipToUnpack, String unpackDirectory)
Код:
using Ionic.Zip;
public bool ExtractZip(string zipToUnpack, string unpackDirectory)
{
using (ZipFile zip1 = ZipFile.Read(zipToUnpack))
{
foreach (ZipEntry z in zip1)
{
if (z.FileName.Contains(".mdf"))
{
foundMDF = true;
isEncrypted = z.UsesEncryption;
}
}
if(isEncrypted)
zip1.Password = zipPass;
zip1.ExtractAll(unpackDirectory, ExtractExistingFileAction.DoNotOverwrite);
ExtractSuccess = true;
}
return ExtractSuccess;
}
Я даже попытался добавить вторую попытку со следующей строкой, и она дает те же результаты.
zip1.ParallelDeflateThreshold = -1;
Кто-нибудь имел дело с этой ошибкой раньше? Пожалуйста, помогите мне разобраться в этой хэш-ошибке! Спасибо!