InfoZip.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:8k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. // InfoZip.cpp: implementation of the CInfoZip class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "../Include/InfoZip.h"
  6. #include <winbase.h>
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. CInfoZip::CInfoZip()
  16. {
  17. m_ZipDllHandle       = NULL;
  18. m_ZipDllExec         = NULL;
  19. m_GetZipDllVersion   = NULL;
  20. m_UnzipDllHandle     = NULL;
  21. m_UnzipDllExec       = NULL;
  22. m_GetUnzipDllVersion = NULL;
  23. }
  24. CInfoZip::~CInfoZip()
  25. {
  26. Finalize();
  27. }
  28. int CInfoZip::GetZipDllVersion()
  29. {
  30. if (GetInitializedZip())
  31. return m_GetZipDllVersion();
  32. else
  33. {
  34. SetLastError(ZERROR_NOT_INITIALIZED);
  35. return 0;
  36. }
  37. }
  38. int CInfoZip::GetUnzipDllVersion()
  39. {
  40. if (GetInitializedUnzip())
  41. return m_GetUnzipDllVersion();
  42. else
  43. {
  44. SetLastError(ZERROR_NOT_INITIALIZED);
  45. return 0;
  46. }
  47. }
  48. void CInfoZip::SetLastError(UINT uiError)
  49. {
  50. m_uiLastError = uiError;
  51. }
  52. UINT CInfoZip::GetLastError()
  53. {
  54. return m_uiLastError;
  55. }
  56. BOOL CInfoZip::Initialize()
  57. {
  58. return InitializeZip() && InitializeUnzip();
  59. }
  60. BOOL CInfoZip::GetInitialized()
  61. {
  62. return GetInitializedZip() && GetInitializedUnzip();
  63. }
  64. BOOL CInfoZip::Finalize()
  65. {
  66. return FinalizeZip() && FinalizeUnzip();
  67. }
  68. void CInfoZip::SetDefaultValues(CZipParams * pParams)
  69. {
  70. pParams->m_hwndHandle = NULL;
  71. pParams->m_pCaller = NULL;
  72. pParams->m_liVersion = GetZipDllVersion();
  73. pParams->m_pfCallbackFunction = DefaultZipCallback;
  74. pParams->m_bTraceEnabled = FALSE;
  75. /*============== Begin Zip Flag section ============== */
  76. pParams->m_pszZipPassword = NULL;
  77. pParams->m_bSuffix = FALSE;
  78. pParams->m_bEncrypt = FALSE;
  79. pParams->m_bSystem = FALSE;
  80. pParams->m_bVolume = FALSE;
  81. pParams->m_bExtra = FALSE;
  82. pParams->m_bNoDirEntries = FALSE;
  83. pParams->m_bDate = FALSE;
  84. pParams->m_bVerboseEnabled = FALSE;
  85. pParams->m_bQuiet = FALSE;
  86. pParams->m_bLevel = 9;
  87. pParams->m_bComprSpecial = FALSE;
  88. pParams->m_bCRLF_LF = FALSE;
  89. pParams->m_bJunkDir = FALSE;
  90. pParams->m_bRecurse = FALSE;
  91. pParams->m_bGrow = TRUE;
  92. pParams->m_bForce = FALSE;
  93. pParams->m_bMove = FALSE;
  94. pParams->m_bDeleteEntries = FALSE;
  95. pParams->m_bUpdate = FALSE;
  96. pParams->m_bFreshen = FALSE;
  97. pParams->m_bJunkSFX = FALSE;
  98. pParams->m_bLatestTime = FALSE;
  99. /*============== End Zip Flag section ============== */
  100. for (int j=0; j<8; j++)
  101. pParams->m_cDate[j] = 0;
  102. pParams->m_liFileCount = 0;
  103. pParams->m_pszArchiveFileName = NULL;
  104. pParams->m_liSeven = 7;
  105. // char *PFileNames[MAX_PATH+1];
  106. }
  107. BOOL CInfoZip::Execute(CZipParams * pParams)
  108. {
  109. if (!GetInitializedZip())
  110. return FALSE;
  111. m_ZipDllExec(pParams);
  112. return TRUE;
  113. }
  114. BOOL CInfoZip::AddFiles(const char *pszArchive, char ** paFiles, int iFileCount)
  115. {
  116. CZipParams zpParams;
  117. SetDefaultValues(&zpParams);
  118. //  seting archive name
  119. zpParams.m_pszArchiveFileName = (char*)malloc(strlen(pszArchive)+1);
  120. ZeroMemory(zpParams.m_pszArchiveFileName, strlen(pszArchive)+1);
  121. strcpy(zpParams.m_pszArchiveFileName, pszArchive);
  122. // seting file count
  123. zpParams.m_liFileCount   = iFileCount;
  124. //  seting file names
  125. for (int i=0; i<iFileCount; i++)
  126. {
  127. zpParams.m_pszFileNames[i] = (char*)malloc(MAX_PATH+1);
  128. ZeroMemory(zpParams.m_pszFileNames[i], MAX_PATH+1);
  129. strcpy(zpParams.m_pszFileNames[i], paFiles[i]);
  130. }
  131. //  executing command
  132. int iProcessedCount = m_ZipDllExec(&zpParams);
  133. ReleaseParams(&zpParams);
  134. return (iProcessedCount == iFileCount);
  135. }
  136. BOOL __stdcall DefaultZipCallback(CZipCallbackData *pData)
  137. {
  138. if (pData->m_liErrorCode)
  139. {
  140. char pszErrorCode[1024];
  141. sprintf(pszErrorCode, "Zip error %d:n%s", pData->m_liErrorCode, pData->m_pszFileNameOrMsg);
  142. AfxMessageBox(pszErrorCode, MB_OK | MB_ICONINFORMATION);
  143. }
  144. return FALSE;
  145. }
  146. void CInfoZip::ReleaseParams(CZipParams * pParams)
  147. {
  148. free(pParams->m_pszArchiveFileName);
  149. for (int i=0; i<pParams->m_liFileCount; i++)
  150. free(pParams->m_pszFileNames[i]);
  151. }
  152. BOOL CInfoZip::GetInitializedZip()
  153. {
  154. return m_ZipDllHandle && m_GetZipDllVersion && m_ZipDllExec;
  155. }
  156. BOOL CInfoZip::GetInitializedUnzip()
  157. {
  158. return m_UnzipDllHandle && m_GetUnzipDllVersion && m_UnzipDllExec;
  159. }
  160. BOOL CInfoZip::InitializeZip()
  161. {
  162. BOOL bInitialized = GetInitializedZip();
  163. if (GetInitializedUnzip())
  164. return TRUE;
  165. m_ZipDllHandle = LoadLibrary("ZIPDLL.DLL");
  166. if (!m_ZipDllHandle)
  167. {
  168. SetLastError(ZERROR_DLL_NOT_FOUND);
  169. return FALSE;
  170. }
  171. m_GetZipDllVersion  = (CGetZipDllVersion)GetProcAddress(m_ZipDllHandle, "GetZipDllVersion");
  172. if (!m_GetZipDllVersion)
  173. {
  174. SetLastError(ZERROR_DLL_FOUNCTION_NOT_FOUND);
  175. return FALSE;
  176. }
  177. m_ZipDllExec = (CZipDllExec)GetProcAddress(m_ZipDllHandle, "ZipDllExec");
  178. if (!m_ZipDllExec)
  179. {
  180. SetLastError(ZERROR_DLL_FOUNCTION_NOT_FOUND);
  181. return FALSE;
  182. }
  183. return TRUE;
  184. }
  185. BOOL CInfoZip::InitializeUnzip()
  186. {
  187. BOOL bInitialized = GetInitializedUnzip();
  188. if (GetInitializedUnzip())
  189. return TRUE;
  190. m_UnzipDllHandle = LoadLibrary("UNZDLL.DLL");
  191. if (!m_UnzipDllHandle)
  192. {
  193. SetLastError(ZERROR_DLL_NOT_FOUND);
  194. return FALSE;
  195. }
  196. m_GetUnzipDllVersion  = (CGetUnzipDllVersion)GetProcAddress(m_UnzipDllHandle, "GetUnzDllVersion");
  197. if (!m_GetUnzipDllVersion)
  198. {
  199. SetLastError(ZERROR_DLL_FOUNCTION_NOT_FOUND);
  200. return FALSE;
  201. }
  202. m_UnzipDllExec = (CUnzipDllExec)GetProcAddress(m_UnzipDllHandle, "UnzDllExec");
  203. if (!m_UnzipDllExec)
  204. {
  205. SetLastError(ZERROR_DLL_FOUNCTION_NOT_FOUND);
  206. return FALSE;
  207. }
  208. return TRUE;
  209. }
  210. BOOL CInfoZip::FinalizeZip()
  211. {
  212. if (GetInitializedZip())
  213. {
  214. FreeLibrary(m_ZipDllHandle);
  215. m_ZipDllHandle       = NULL;
  216. m_ZipDllExec         = NULL;
  217. m_GetZipDllVersion   = NULL;
  218. }
  219. return TRUE;
  220. }
  221. BOOL CInfoZip::FinalizeUnzip()
  222. {
  223. if (GetInitializedUnzip())
  224. {
  225. FreeLibrary(m_UnzipDllHandle);
  226. m_UnzipDllHandle       = NULL;
  227. m_UnzipDllExec         = NULL;
  228. m_GetUnzipDllVersion   = NULL;
  229. }
  230. return TRUE;
  231. }
  232. BOOL CInfoZip::Execute(CUnzipParams * pParams)
  233. {
  234. if (!GetInitializedUnzip())
  235. return FALSE;
  236. m_UnzipDllExec(pParams);
  237. return TRUE;
  238. }
  239. void CInfoZip::ReleaseParams(CUnzipParams * pParams)
  240. {
  241. free(pParams->m_pszArchiveFileName);
  242. for (int i=0; i<pParams->m_liFileCount; i++)
  243. free(pParams->m_pszFileNames[i]);
  244. }
  245. void CInfoZip::SetDefaultValues(CUnzipParams * pParams)
  246. {
  247. pParams->m_wndHandle          = NULL;
  248. pParams->m_pCaller            = NULL;
  249. pParams->m_liVersion          = GetUnzipDllVersion();
  250. pParams->m_pfCallbackFunction = DefaultZipCallback;
  251. pParams->m_bTraceEnabled = FALSE;
  252. pParams->m_bPromptToOverwrite = FALSE;
  253. pParams->m_pszZipPassword     = NULL;
  254. pParams->m_bTest              = FALSE;
  255. pParams->m_bComments          = FALSE;
  256. pParams->m_bConvert           = FALSE;
  257. pParams->m_bQuiet             = FALSE;
  258. pParams->m_bVerboseEnabled    = FALSE;
  259. pParams->m_bUpdate            = FALSE;
  260. pParams->m_bFreshen           = FALSE;
  261. pParams->m_bDirectories       = TRUE;
  262. pParams->m_bOverwrite         = TRUE;
  263. pParams->m_liFileCount        = 0;
  264. pParams->m_pszArchiveFileName = NULL;
  265. pParams->m_liSeven            = 7;
  266. }
  267. BOOL CInfoZip::ExtractFiles(const char * pszArchive, const char * pszTargetFolder)
  268. {
  269. char pszCurrentDir[MAX_PATH+1];
  270. ZeroMemory(pszCurrentDir, MAX_PATH+1);
  271. GetCurrentDirectory(MAX_PATH+1, pszCurrentDir);
  272. SetCurrentDirectory(pszTargetFolder);
  273. CUnzipParams uzpParams;
  274. SetDefaultValues(&uzpParams);
  275. //  seting archive name
  276. uzpParams.m_pszArchiveFileName = (char*)malloc(strlen(pszArchive)+1);
  277. ZeroMemory(uzpParams.m_pszArchiveFileName, strlen(pszArchive)+1);
  278. strcpy(uzpParams.m_pszArchiveFileName, pszArchive);
  279. //  seting file count
  280. uzpParams.m_liFileCount = 1;
  281. //  seting file names
  282. uzpParams.m_pszFileNames[0] = (char*)malloc(MAX_PATH+1);
  283. ZeroMemory(uzpParams.m_pszFileNames[0], MAX_PATH+1);
  284. strcpy(uzpParams.m_pszFileNames[0], "*.*");
  285. //  executing command
  286. int iProcessedCount = m_UnzipDllExec(&uzpParams);
  287. ReleaseParams(&uzpParams);
  288. SetCurrentDirectory(pszCurrentDir);
  289. return TRUE;
  290. }