c++ - 如何增加 7z.exe 的可移植性

标签 c++ 7zip

<分区>

我正在开发一个需要解压缩 .zip 文件的程序。在尝试了几种不同的方法之后,我发现唯一可以满足我所有需求的方法是 7z.exe。它在我开发时效果很好,因为我可以将可执行文件的位置硬编码到代码中。但是,如果其他人尝试使用它,那部分将不起作用。有什么办法可以让他们访问这个吗?谢谢!

最佳答案

我建议您使用压缩库(查看 libarchive: http://www.libarchive.org )。如果您不能这样做,您应该将 7z.exe 及其依赖项与您的应用程序一起发布,将它们放在与您的主要可执行文件相对的固定位置。 然后使用 GetModuleFileName 获取主要可执行文件的绝对路径,使用 PathCchCombine 剥离并与相对路径组合:

char filename[MAX_PATH];
GetModuleFileName(NULL,filename,(sizeof(filename))/(sizeof char));
PathCchRemoveFileSpec(filename,(sizeof(filename))/(sizeof char));
PathCchCombine(filename,(sizeof(filename))/(sizeof char),filename,"./7zip/7zip.exe");
//the absolute path of 7z.exe is now in filename

GetModuleFileName 的文档:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms683197(v=vs.85).aspx

PathCchRemoveFileSpec:

http://msdn.microsoft.com/en-us/library/hh707092(v=vs.85).aspx

对于PathCchCombine:

http://msdn.microsoft.com/en-us/library/hh707085(v=vs.85).aspx

关于c++ - 如何增加 7z.exe 的可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18532791/

相关文章:

c++ - 在第一个循环C++之后重置值吗?

7zip:排除隐藏目录

python - 如何使用 python 以编程方式计算存档中的文件数

c# - 如何获取 7-zip 存档中打包文件的大小

c# - 如何使用 .NET 创建包含多个文件的 7-Zip 存档?

batch-file - 批处理文件到 Zip 文件

c++ - 在引用 C++ 中存储函数的返回值

C++ for 循环和基于范围的循环性能

c++ - 合并两个排序的链表

c++ - 如何让 RakNet 更可靠?