如何使用 C/C++检查 ZIP 文件(Office Open XML 文件)的完整性
How to check integrity of ZIP-file (Office Open XML file) with C/C++?
美好的一天!
有时,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;
}
相关文章:
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 从生成文件编译错误:"Unable to open output file" ..."No such file or directory"
- 我可以对"int 文件 = open(path, flag);"做点什么吗?
- 进口。TLB文件给出"cannot open source file x.tlh"
- Open() 用于创建文件和打开现有文件.有人能分辨出其中的区别
- 成功使用CMakeLists制作后如何修复"open: No such file or directory"错误(该文件实际上存在)
- 为什么打开许多文件时"open file failed"?
- 已安装 SDK 的头文件的"Cannot open source file"
- 如何使用 C/C++检查 ZIP 文件(Office Open XML 文件)的完整性
- 读取视频文件"Open CV WARNING: Couldn't read movie file bird.avi"时出现问题
- C++ 中的文件处理错误 - 调用"std::basic_fstream<char, std::char_traits<char> >::open(const char[8],
- open() 的参数:每个人都应该拥有对文件的所有访问权限,并且应该在创建时被截断
- 包括新文件夹中的头文件 "cannot open include file - no such file or directory"
- 系统调用 open() 创建可执行文件
- 使用ofstream或fstream-open不会出错,也不会打开文件
- Qt/QML:如何在不重新启动应用程序的情况下"switch to"或"open"另一个 QML 文件?
- Qt:如何通过外部程序打开文件,"open with..."对话框
- 文件打开时"QIODevice::write: device not open"
- "Error C1083: Cannot open include file"但我有包含文件的路径
- file.open()找不到文件、c++、Xcode、OpenGL