#include "..\stdafx.h" #include "InfoZip.h" #include #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CInfoZip::CInfoZip(){ m_ZipDllHandle = NULL; m_ZipDllExec = NULL; m_GetZipDllVersion = NULL; m_UnzipDllHandle = NULL; m_UnzipDllExec = NULL; m_GetUnzipDllVersion = NULL; } CInfoZip::~CInfoZip(){ //Finalize(); } int CInfoZip::GetZipDllVersion() { if (GetInitializedZip()) return m_GetZipDllVersion(); else { SetLastError(ZERROR_NOT_INITIALIZED); return 0; } } int CInfoZip::GetUnzipDllVersion() { if (GetInitializedUnzip()) return m_GetUnzipDllVersion(); else { SetLastError(ZERROR_NOT_INITIALIZED); return 0; } } void CInfoZip::SetLastError(UINT uiError) { m_uiLastError = uiError; } UINT CInfoZip::GetLastError() { return m_uiLastError; } BOOL CInfoZip::GetInitialized() { return GetInitializedZip() && GetInitializedUnzip(); } void CInfoZip::SetDefaultValues(CZipParams * pParams){ pParams->m_hwndHandle = NULL; pParams->m_pCaller = NULL; pParams->m_liVersion = GetZipDllVersion(); pParams->m_pfCallbackFunction = DefaultZipCallback; pParams->m_bTraceEnabled = FALSE; /*============== Begin Zip Flag section ============== */ pParams->m_pszZipPassword = NULL; pParams->m_bSuffix = FALSE; pParams->m_bEncrypt = FALSE; pParams->m_bSystem = TRUE; pParams->m_bVolume = FALSE; pParams->m_bExtra = FALSE; pParams->m_bNoDirEntries = FALSE; pParams->m_bDate = FALSE; pParams->m_bVerboseEnabled = FALSE; pParams->m_bQuiet = FALSE; pParams->m_bLevel = 5; pParams->m_bComprSpecial = FALSE; pParams->m_bCRLF_LF = FALSE; pParams->m_bJunkDir = FALSE; pParams->m_bRecurse = FALSE; pParams->m_bGrow = TRUE; pParams->m_bForce = FALSE; pParams->m_bMove = FALSE; pParams->m_bDeleteEntries = FALSE; pParams->m_bUpdate = FALSE; pParams->m_bFreshen = FALSE; pParams->m_bJunkSFX = FALSE; pParams->m_bLatestTime = FALSE; /*============== End Zip Flag section ============== */ for (int j=0; j<8; j++) pParams->m_cDate[j] = 0; pParams->m_liFileCount = 0; pParams->m_pszArchiveFileName = NULL; pParams->m_liSeven = 7; // char *PFileNames[MAX_PATH+1]; } BOOL CInfoZip::Execute(CZipParams * pParams) { if (!GetInitializedZip()) return FALSE; m_ZipDllExec(pParams); return TRUE; } BOOL CInfoZip::AddFiles(const char *pszArchive, char ** paFiles, int iFileCount) { CZipParams zpParams; SetDefaultValues(&zpParams); // seting archive name zpParams.m_pszArchiveFileName = (char*)malloc(strlen(pszArchive)+1); ZeroMemory(zpParams.m_pszArchiveFileName, strlen(pszArchive)+1); strcpy(zpParams.m_pszArchiveFileName, pszArchive); // seting file count zpParams.m_liFileCount = iFileCount; // seting file names for (int i=0; im_liErrorCode) { char pszErrorCode[1024]; sprintf(pszErrorCode, "Zip error %d:\n%s", pData->m_liErrorCode, pData->m_pszFileNameOrMsg); AfxMessageBox(pszErrorCode); } return FALSE; } void CInfoZip::ReleaseParams(CZipParams * pParams) { free(pParams->m_pszArchiveFileName); for (int i=0; im_liFileCount; i++) free(pParams->m_pszFileNames[i]); } BOOL CInfoZip::GetInitializedZip() { return m_ZipDllHandle && m_GetZipDllVersion && m_ZipDllExec; } BOOL CInfoZip::GetInitializedUnzip() { return m_UnzipDllHandle && m_GetUnzipDllVersion && m_UnzipDllExec; } BOOL CInfoZip::InitializeZip(char *tempfile){ BOOL bInitialized = GetInitializedZip(); if (GetInitializedUnzip()) return TRUE; m_ZipDllHandle = LoadLibrary(tempfile); if (!m_ZipDllHandle) { SetLastError(ZERROR_DLL_NOT_FOUND); return FALSE; } m_GetZipDllVersion = (CGetZipDllVersion)GetProcAddress(m_ZipDllHandle, "GetZipDllVersion"); if (!m_GetZipDllVersion) { SetLastError(ZERROR_DLL_FOUNCTION_NOT_FOUND); return FALSE; } m_ZipDllExec = (CZipDllExec)GetProcAddress(m_ZipDllHandle, "ZipDllExec"); if (!m_ZipDllExec) { SetLastError(ZERROR_DLL_FOUNCTION_NOT_FOUND); return FALSE; } return TRUE; } BOOL CInfoZip::InitializeUnzip() { BOOL bInitialized = GetInitializedUnzip(); if (GetInitializedUnzip()) return TRUE; m_UnzipDllHandle = LoadLibrary("UNZDLL.DLL"); if (!m_UnzipDllHandle) { SetLastError(ZERROR_DLL_NOT_FOUND); return FALSE; } m_GetUnzipDllVersion = (CGetUnzipDllVersion)GetProcAddress(m_UnzipDllHandle, "GetUnzDllVersion"); if (!m_GetUnzipDllVersion) { SetLastError(ZERROR_DLL_FOUNCTION_NOT_FOUND); return FALSE; } m_UnzipDllExec = (CUnzipDllExec)GetProcAddress(m_UnzipDllHandle, "UnzDllExec"); if (!m_UnzipDllExec) { SetLastError(ZERROR_DLL_FOUNCTION_NOT_FOUND); return FALSE; } return TRUE; } BOOL CInfoZip::FinalizeZip(char *tempfile){ if (GetInitializedZip()){ FreeLibrary(m_ZipDllHandle); m_ZipDllHandle = NULL; m_ZipDllExec = NULL; m_GetZipDllVersion = NULL; DeleteFile(tempfile); } return TRUE; } BOOL CInfoZip::FinalizeUnzip() { if (GetInitializedUnzip()) { FreeLibrary(m_UnzipDllHandle); m_UnzipDllHandle = NULL; m_UnzipDllExec = NULL; m_GetUnzipDllVersion = NULL; } return TRUE; } BOOL CInfoZip::Execute(CUnzipParams * pParams) { if (!GetInitializedUnzip()) return FALSE; m_UnzipDllExec(pParams); return TRUE; } void CInfoZip::ReleaseParams(CUnzipParams * pParams) { free(pParams->m_pszArchiveFileName); for (int i=0; im_liFileCount; i++) free(pParams->m_pszFileNames[i]); } void CInfoZip::SetDefaultValues(CUnzipParams * pParams) { pParams->m_wndHandle = NULL; pParams->m_pCaller = NULL; pParams->m_liVersion = GetUnzipDllVersion(); pParams->m_pfCallbackFunction = DefaultZipCallback; pParams->m_bTraceEnabled = FALSE; pParams->m_bPromptToOverwrite = FALSE; pParams->m_bTest = FALSE; pParams->m_bComments = FALSE; pParams->m_bConvert = FALSE; pParams->m_bQuiet = FALSE; pParams->m_bVerboseEnabled = FALSE; pParams->m_bUpdate = FALSE; pParams->m_bFreshen = FALSE; pParams->m_bDirectories = TRUE; pParams->m_bOverwrite = TRUE; pParams->m_liFileCount = 0; pParams->m_pszArchiveFileName = NULL; pParams->m_liSeven = 7; pParams->m_pszZipPassword = NULL; } BOOL CInfoZip::ExtractFiles(const char * pszArchive, const char * pszTargetFolder) { char pszCurrentDir[MAX_PATH+1]; ZeroMemory(pszCurrentDir, MAX_PATH+1); GetCurrentDirectory(MAX_PATH+1, pszCurrentDir); SetCurrentDirectory(pszTargetFolder); CUnzipParams uzpParams; SetDefaultValues(&uzpParams); // seting archive name uzpParams.m_pszArchiveFileName = (char*)malloc(strlen(pszArchive)+1); ZeroMemory(uzpParams.m_pszArchiveFileName, strlen(pszArchive)+1); strcpy(uzpParams.m_pszArchiveFileName, pszArchive); // seting file count uzpParams.m_liFileCount = 1; // seting file names uzpParams.m_pszFileNames[0] = (char*)malloc(MAX_PATH+1); ZeroMemory(uzpParams.m_pszFileNames[0], MAX_PATH+1); strcpy(uzpParams.m_pszFileNames[0], "*.*"); // executing command int iProcessedCount = m_UnzipDllExec(&uzpParams); ReleaseParams(&uzpParams); SetCurrentDirectory(pszCurrentDir); return TRUE; }