我试图为跨平台应用程序存档文件,而且它看起来像Minizip(建立在zlib上)与归档程序来的一样便携。如何使用Minizip(在Zlib上)?
当我试图运行下面的虚拟代码,但是,我得到了一个系统错误[my executable] has stopped working. Windows can check online for a solution to the problem.
谁能帮我看看怎么使用这个库? —(有没有文档或教程的任何地方,我可以找到)
zip_fileinfo zfi;
int main()
{
zipFile zf = zipOpen("myarch.zip",APPEND_STATUS_ADDINZIP);
int ret = zipOpenNewFileInZip(zf,
"myfile.txt",
&zfi,
NULL, 0,
NULL, 0,
"my comment for this interior file",
Z_DEFLATED,
Z_NO_COMPRESSION
);
zipCloseFileInZip(zf);
zipClose(zf, "my comment for exterior file");
return 0;
}
规格:MSYS + MinGW的,Windows 7中,使用zlibwapi.dll从zlib125dll.zip/dll32
这很好。但有几个问题:1.这假设整个文件可以放在内存中,这看起来有些简单,但对于这个示例来说可能足够好。 2.没有任何理由说明,如果初始文件长度为0,则0长度的文件输出是错误的。3.假设这是一个错误,则不需要进行三元操作。即'if(zipWriteInFileInZip(zf,size == 0?“”:&buffer [0],size))'可以写成if(zipWriteInFileInZip(zf,&buffer [0],size))''。 4.我建议不要使用下划线前缀。我知道你在使用小写字母后,但是... *耸耸肩* – Adrian 2016-03-23 17:05:33
你提出的第二和第三点是错误的。大小== 0检查是为了确保在零长度上不执行缓冲区[0]。 if语句中的逻辑或操作可以确保将零长度的文件正确地写入zip文件,并且后面的三元再次确保不会在零长度上调用buffer [0]。该代码正常工作,并按预期。 – niemiro 2016-06-10 00:35:11
这被标记为C,而不是C++。 – 2017-04-14 01:55:25