【问题标题】:Zipping increment file names using Zip Utils使用 Zip Utils 压缩增量文件名
【发布时间】:2012-10-07 02:16:57
【问题描述】:

您好,我一直在使用“Zip Utils” http://www.codeproject.com/Articles/7530/Zip-Utils-clean-elegant-simple-C-Win32

压缩文件和文件夹。简单的事情是如果知道文件名我只需要做这样的事情

HZIP hz; DWORD writ;
hz = CreateZip(_T("filename\\image1.zip"),0);

问题是我在尝试通过在循环中增加文件名来压缩文件时出错

    int i= 0;
for(i=0; i<record; i++)
{
     ZipAdd(hz,_T("doc"+i+1+".kml"), _T("filename\\doc"+i+1+".kml"));
    }

【问题讨论】:

  • 这似乎不是如何使用 Zip Utils 的问题。您正在尝试以其他语言的方式连接字符串,但这不是 C++。在将字符串传递给 ZipAdd 之前,您需要先使用递增的文件名格式化字符串参数。
  • @GX 错误 6 错误 C2665: 'ZipAdd' : 2 个重载都不能使用int i= 0; string filepath1 = "doc"+i+1+".kml"; string filepath2 = "GenFiles\\doc"+i+1+".kml"; for(i=0; i&lt;record; i++) { ZipAdd(hz,_T(filepath1), _T(filepath2)); } 转换所有参数类型 错误 8 错误 C2065: 'Lfilepath1' : 未声明的标识符 错误 8 错误 C2065: “Lfilepath2”:未声明的标识符错误 7 错误 C2440:“正在初始化”:无法从“System::String ^”转换为“std::basic_string<_elem>”
  • System::String^ 看起来像 C# 或 .NET/CLR,而不是原生 C++。您需要一些帮助来了解如何创建一个在运行时插入一个递增数字的字符串。
  • 是的,你能帮我解决这个问题吗?
  • 如果以下答案解决了您的问题,请将其标记为“已接受”。如果您编辑问题的标题和标签以显示它与字符串连接有关,而不是 Zip Utils 或文件名,这也会很有帮助。

标签: c++ dynamic zip filenames


【解决方案1】:

这不是编写代码的最有效方式,但它说明了这个概念。使用 to_string( ... ) 将数字转换为字符串以进行连接。它需要一个 long long 参数,而不是 int。

long long i;
string filepath1, filepath2;
for(i=0; i<record; i++)
{
   filepath1 = "doc" + to_string(i + 1) + ".klm";
   filepath2 = "GenFiles\\doc" + to_string(i + 1) + ".klm";
   ZipAdd(hz,filepath1,filepath2);
} 

【讨论】:

  • 谢谢,但我知道必须做那部分。只有ZipAdd(hz,_T(filepath1), _T(filepath2)); 有问题我收到两个错误error C2065: 'Lfilepath1' : undeclared identifier error C2065: 'Lfilepath2' : undeclared identifier
  • 我将您的其​​他错误从您的代码复制到了我的答案中。不需要文件路径参数周围的 _T( )。根据 ZipAdd 的要求,您可能需要类似 filepath1.c_str 的内容。
  • 几乎在尝试ZipAdd(hz,filepath1.c_str(), filepath2.c_str()); 时,我得到'ZipAdd':如果有帮助,这两个重载都不能转换所有参数类型错误来自 zip.h ZRESULT ZipAdd(HZIP hz,const TCHAR *dstzn, const TCHAR *fn); ZRESULT ZipAdd(HZIP hz,const TCHAR *dstzn, void *src,unsigned int len);
  • 我们已经离开了 Stack Overflow Question+Answer 的领域,并将其变成了辅导聊天。您需要处理有关字符串的特定语言和开发环境的文档。 TCHAR 和 T( ) 是根据编译器选项重新定义字符大小和格式的宏。其他元素,如 string 和 System::String 也可能意味着不同的东西,具体取决于设置的编译器选项。您需要确保字符串的所有不同用途都是兼容的,或者您需要在类型之间进行转换。
  • 感谢我尝试解决 =) 如果现在需要开始一个新问题。嗯有没有办法投票或选择最佳答案?谢谢
猜你喜欢
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多