gpt4 book ai didi

c - 我如何使用 Minizip(在 Zlib 上)?

转载 作者:太空狗 更新时间:2023-10-29 16:46:16 27 4
gpt4 key购买 nike

我正在尝试为跨平台应用程序归档文件,看起来 Minizip(基于 zlib)与归档程序一样便携。

但是,当我尝试运行以下虚拟代码时,出现系统错误 [my executable] has stopped working。 Windows 可以在线检查问题的解决方案。

谁能帮我看看如何使用这个库? —(我找不到任何文档或教程)

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,使用 zlib125dll.zip/dll32 中的 zlibwapi.dll

最佳答案

由于我是通过 Google 发现这个问题的,它不包含任何完整的、有效的代码,所以我在这里为 future 的访问者提供一些代码。

int CreateZipFile (std::vector<wstring> paths)
{
zipFile zf = zipOpen(std::string(destinationPath.begin(), destinationPath.end()).c_str(), APPEND_STATUS_CREATE);
if (zf == NULL)
return 1;

bool _return = true;
for (size_t i = 0; i < paths.size(); i++)
{
std::fstream file(paths[i].c_str(), std::ios::binary | std::ios::in);
if (file.is_open())
{
file.seekg(0, std::ios::end);
long size = file.tellg();
file.seekg(0, std::ios::beg);

std::vector<char> buffer(size);
if (size == 0 || file.read(&buffer[0], size))
{
zip_fileinfo zfi = { 0 };
std::wstring fileName = paths[i].substr(paths[i].rfind('\\')+1);

if (S_OK == zipOpenNewFileInZip(zf, std::string(fileName.begin(), fileName.end()).c_str(), &zfi, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_DEFAULT_COMPRESSION))
{
if (zipWriteInFileInZip(zf, size == 0 ? "" : &buffer[0], size))
_return = false;

if (zipCloseFileInZip(zf))
_return = false;

file.close();
continue;
}
}
file.close();
}
_return = false;
}

if (zipClose(zf, NULL))
return 3;

if (!_return)
return 4;
return S_OK;
}

关于c - 我如何使用 Minizip(在 Zlib 上)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com