(C ++) Ошибка ZR_FLATE при распаковке файла размером 0 байт. Распакуйте источник: «Zip Utils - чистый, элегантный ....» - PullRequest
1 голос
/ 16 сентября 2011

Я использую unzip.h и .cpp из этого источника: http://www.codeproject.com/KB/files/zip_utils.aspx

Как гласит заголовок - когда я распаковываю файл с 0 байтами, я получаю ZR_FALTE. Я искал эту ошибку во всем и не нашел никакого ответа. Я также разместил вопрос по codeproject для автора codeproject post , но тот же вопрос уже задавался там раньше без ответов.

У меня вопрос, работал ли кто-нибудь с этим источником раньше и знает, как это исправить. Или при каких других условиях может возникнуть ошибка.

Текущий способ сузить ошибку и игнорировать ее:

ZENTRY zEntry;
ZRESULT zRes;

// uncompress...

if (zRes == ZR_FLATE && zEntry.comp_size == 0 && zEntry.unc_size == 0)
{
   // No error
}

Определение ошибки в источнике: «внутренняя ошибка в коде де / инфляция»

Спасибо

1 Ответ

1 голос
/ 02 января 2012

Это ошибка в функции: unzReadCurrentFile (...). Вы можете исправить это, добавив следующие строки (в строке unzip.cpp: 3486):

if(pfile_in_zip_read_info->rest_read_uncompressed==0)
{
    if (reached_eof!=0) *reached_eof=true;
    return UNZ_EOF;
};

Как видите, обнаружение EOF не работает для файлов нулевого размера, я думаю, это из-за проверок размера буфера, которые были добавлены позже.

...