如何用C++Builder的TZipFile创建压缩包内相对路径并添加文件?
使用C++Builder TZipFile创建带相对路径的压缩包
针对你从TZipForge迁移到TZipFile时遇到的问题,核心是搞清楚TZipFile::Add方法的参数逻辑:
- 第一个参数是本地文件系统中真实存在的文件路径(必须是能找到的文件)
- 第二个参数是压缩包内要存放的目标路径及文件名(这个路径不需要在本地存在,TZipFile会自动在压缩包中创建对应的文件夹结构)
你的错误在于第一个参数传了"file-1",如果本地文件是file-1.xml且位于当前工作目录,应该传入完整的本地文件名;第二个参数用压缩包内的相对路径即可,注意用跨平台的路径分隔符(可以借助IncludeTrailingPathDelimiter或TPath::Combine处理)。
完整代码示例
#include <System.Zip.hpp> #include <System.IOUtils.hpp> void CreateZipPackage() { TZipFile* Zip = new TZipFile(); try { // 创建新的压缩包,覆盖已有文件 Zip->Open(L"output.zip", TZipMode::zmCreate); // 添加根目录下的文件:本地文件路径 -> 压缩包内根路径 Zip->Add(L"file-a.xml", L"file-a.xml"); Zip->Add(L"file-b.xml", L"file-b.xml"); // 添加folder-1下的文件:本地文件路径 -> 压缩包内相对路径 // 用TPath::Combine拼接跨平台路径,避免硬编码分隔符 String destPath1 = TPath::Combine(L"folder-1", L"file-1.xml"); Zip->Add(L"file-1.xml", destPath1); String destPath2 = TPath::Combine(L"folder-1", L"file-2.xml"); Zip->Add(L"file-2.xml", destPath2); // 完成后关闭压缩包 Zip->Close(); } __finally { delete Zip; } }
关键说明
- 如果本地文件不在当前工作目录,第一个参数要传入完整的绝对路径,比如
L"C:\\MyFiles\\file-1.xml"(Windows)或L"/home/user/file-1.xml"(Linux/macOS/移动平台) TPath::Combine会自动根据当前平台使用正确的路径分隔符,比手动写\\或/更可靠- 压缩包内的
folder-1文件夹不需要手动创建,当你添加带有该路径的文件时,TZipFile会自动生成对应的文件夹条目
内容的提问来源于stack exchange,提问作者outerlimits
相关产品推荐
相关产品推荐

