VC6.0中关于HZIP的压缩和解压缩

0x00 关于LONGLONG

下面展示一些 内联代码片

FILETIME timet2filetime(const lutime_t t)
{ 
  LONGLONG i = Int32x32To64(t,10000000) + 116444736000000000LL;
  FILETIME ft;
  ft.dwLowDateTime = (DWORD) i;
  ft.dwHighDateTime = (DWORD)(i >>32);
  return ft;
}

报错 error C2059: syntax error : ‘bad suffix on number’
只要将 LONGLONG i = Int32x32To64(t,10000000) + 116444736000000000LL中的LL改成一个L,即LONGLONG i = Int32x32To64(t,10000000) + 116444736000000000L;
改完后,在vc6.0中不报错了。

0x01 带密码解压缩,文件少12字节

这个问题,网上已经有答案了,这里直接引用下吧。

if (uDoEncHead>0)
{
   char bufcrc=pfile_in_zip_read_info->stream.next_in[uDoEncHead-1];
 // pfile_in_zip_read_info->rest_read_uncompressed-=uDoEncHead;
  pfile_in_zip_read_info->stream.avail_in -= uDoEncHead;
  pfile_in_zip_read_info->stream.next_in += uDoEncHead;
  pfile_in_zip_read_info->encheadleft -= uDoEncHead;
  if (pfile_in_zip_read_info->encheadleft==0)
  {
     if (bufcrc!=pfile_in_zip_read_info->crcenctest)
        return UNZ_PASSWORD;
  }
}

0x02 至此HZIP的完美了!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你好,关于你的问题,我可以提供以下代码段给你参考: ``` #include <windows.h> #include <tchar.h> #include <stdio.h> #include <zip.h> int UnzipFile(LPCTSTR lpszFilePath, LPCTSTR lpszDir) { int nRet = 0; unzFile hZip = unzOpen(lpszFilePath); if (!hZip) { nRet = -1; return nRet; } unz_global_info globalInfo = { 0 }; if (unzGetGlobalInfo(hZip, &globalInfo) != UNZ_OK) { nRet = -2; unzClose(hZip); return nRet; } char szPath[MAX_PATH] = { 0 }; if (unzGoToFirstFile(hZip) != UNZ_OK) { nRet = -3; unzClose(hZip); return nRet; } do { unz_file_info fileInfo = { 0 }; char szFileName[MAX_PATH] = { 0 }; if (unzGetCurrentFileInfo(hZip, &fileInfo, szFileName, MAX_PATH, NULL, 0, NULL, 0) != UNZ_OK) { nRet = -4; unzClose(hZip); return nRet; } _snprintf_s(szPath, MAX_PATH, "%s%s", lpszDir, szFileName); DWORD dwAttrs = GetFileAttributesA(szPath); if (dwAttrs != INVALID_FILE_ATTRIBUTES) { if ((dwAttrs & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) { if (!RemoveDirectoryA(szPath)) { nRet = -5; unzClose(hZip); return nRet; } } else { if (!DeleteFileA(szPath)) { nRet = -6; unzClose(hZip); return nRet; } } } if (unzOpenCurrentFile(hZip) != UNZ_OK) { nRet = -7; unzClose(hZip); return nRet; } FILE* fp = NULL; fopen_s(&fp, szPath, "wb"); if (!fp) { nRet = -8; unzCloseCurrentFile(hZip); unzClose(hZip); return nRet; } char* pBuffer = new char[fileInfo.uncompressed_size]; if (!pBuffer) { nRet = -9; fclose(fp); unzCloseCurrentFile(hZip); unzClose(hZip); return nRet; } if (unzReadCurrentFile(hZip, pBuffer, fileSize) < 0) { nRet = -10; delete[] pBuffer; fclose(fp); unzCloseCurrentFile(hZip); unzClose(hZip); return nRet; } fwrite(pBuffer, fileInfo.uncompressed_size, 1, fp); delete[] pBuffer; fclose(fp); unzCloseCurrentFile(hZip); } while (unzGoToNextFile(hZip) == UNZ_OK); unzClose(hZip); return nRet; } int main() { LPCTSTR lpszFilePath = _T("D:\\file.zip"); LPCTSTR lpszDir = _T("D:\\TargetPath\\"); return UnzipFile(lpszFilePath, lpszDir); } ``` 这是一个在Windows下用C语言解压zip文件并替换目标目录下原文件的方法。你可以根据自己的需求适当修改代码。如果你有其他问题,可以随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TMGZSQQ490574661

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值