要开始使用libzip,我尝试创建一个存档并向其中添加文件。这是我的代码。
string archive = "path/to/archive.zip";
string file = "message";
char *data = "Hello World!";
int error = 0;
zip *archive = zip_open(path.c_str(), ZIP_CREATE, &error);
if(error)
{
cout << "could not open or create archive" << endl;
return false;
}
zip_source *source = zip_source_buffer(archive, data, sizeof(data), 0);
if(source == NULL)
{
cout << "failed to create source buffer. " << zip_strerror(archive) << endl;
return false;
}
int index = (int)zip_file_add(archive, file.c_str(), source, ZIP_FL_OVERWRITE);
if(index < 0)
{
cout << "failed to add file to archive. " << zip_strerror(archive) << endl;
return false;
}
zip_source_free(source);
zip_close(archive);
return true;
此代码在zip_close()
调用时抛出运行时错误。
Application.exe中0x00EDDD16处的未处理异常:0xC00000FD:堆栈溢出(参数:0x00000001,0x002C2FFC)。
更新:我删除了zip_source_free()
来电,因为我被告知这已由zip_file_add()
完成。此外,我检查archive
是否暂不NULL
。这些更改在zip_close()
处引发了另一个错误。
Application.exe中0x0065BC57处的未处理异常:将无效参数传递给认为无效参数致命的函数。
我做错了什么?
答案 0 :(得分:3)
您不应该致电zip_source_free()
,因为source
已经在zip_file_add()
中使用了zip_open()
并将其释放。
此外,您应该检查errorp
的返回值,而不是NULL
的值。文档中没有任何内容表明错误代码不同于0.但是,如果无法打开zip文件,则返回值 将为{{1}}。