如何使用 C/C++检查 ZIP 文件(Office Open XML 文件)的完整性

How to check integrity of ZIP-file (Office Open XML file) with C/C++?

本文关键字:文件 Open Office XML 完整性 C++ 检查 ZIP 何使用      更新时间:2023-10-16

美好的一天!

有时,Office Open XML格式(docx,pptx,xslx)的文件的某些部分会跳动。众所周知,这些文件实际上是ZIP文件(可能具有特殊的压缩算法?

是否有任何库(最好是 C/C++ 中的示例)可以检查(而不是解压缩)ZIP 文件的完整性(检查存档内容的 CRC 校验和)?

我使用了miniz:

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;
}
相关文章: