Как проверить целостность ZIP-файла (файла Office Open XML) с C / C ++?

Добрый день!

Иногда случается, что какая-то часть файла в формате Office Open XML (docx, pptx, xslx) бьется. Известно, что эти файлы на самом деле являются ZIP-файлами (возможно, со специальным алгоритмом сжатия?).

Есть ли какая-либо библиотека (желательно с примером на C / C ++), которая может проверять (не распаковывать) целостность ZIP-файла (проверять контрольную сумму CRC содержимого архива)?

0

Решение

я использовал Mini-Z:

BOOL isZipCorrect(const char *pFilename) {
int ci;
void *p;
size_t uncomp_size;
mz_bool status;
mz_zip_archive zip_archive;
// open the archive.
memset(&zip_archive, 0, sizeof(zip_archive));
status = mz_zip_reader_init_file(&zip_archive, pFilename, 0);
if (!status) {
return FALSE;
}

// go throw all files
for (ci = 0; ci < (int)mz_zip_reader_get_num_files(&zip_archive); ci++) {
// get information about each file in the archive
mz_zip_archive_file_stat file_stat;
if (!mz_zip_reader_file_stat(&zip_archive, ci, &file_stat))
{
mz_zip_reader_end(&zip_archive);
return FALSE;
}

// try to extract this file
p = mz_zip_reader_extract_file_to_heap(&zip_archive, file_stat.m_filename, &uncomp_size, 0);
if (!p)
{
mz_zip_reader_end(&zip_archive);
return FALSE;
}

// we're done.
mz_free(p);
}

// close the archive, freeing any resources it was using
mz_zip_reader_end(&zip_archive);

// return ok state
return TRUE;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]