1 ///////////////////////////////////////////////////////////////////////////////
\r
3 // Module: zlibcpp.cpp
\r
5 // Desc: See zlibcpp.h
\r
7 // Copyright (c) 2003 Michael Carruth
\r
9 ///////////////////////////////////////////////////////////////////////////////
\r
13 #include "zlibcpp.h"
\r
14 #include "utility.h"
\r
16 //////////////////////////////////////////////////////////////////////
\r
17 // Construction/Destruction
\r
18 //////////////////////////////////////////////////////////////////////
\r
21 //-----------------------------------------------------------------------------
\r
32 //-----------------------------------------------------------------------------
\r
35 // Close open zip file
\r
44 //-----------------------------------------------------------------------------
\r
47 // Create or open zip file
\r
49 BOOL CZLib::Open(string f_file, int f_nAppend)
\r
51 m_zf = zipOpen(f_file.c_str(), f_nAppend);
\r
52 return (m_zf != NULL);
\r
56 //-----------------------------------------------------------------------------
\r
59 // Close open zip file
\r
64 zipClose(m_zf, NULL);
\r
70 //-----------------------------------------------------------------------------
\r
73 // Adds a file to the zip archive
\r
75 BOOL CZLib::AddFile(string f_file)
\r
77 BOOL bReturn = FALSE;
\r
79 // Open file being added
\r
80 HANDLE hFile = NULL;
\r
81 hFile = CreateFile(f_file.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
\r
84 // Get file creation date
\r
85 FILETIME ft = CUtility::getLastWriteFileTime(f_file);
\r
86 zip_fileinfo zi = {0};
\r
88 FileTimeToDosDateTime(
\r
89 &ft, // last write FILETIME
\r
90 ((LPWORD)&zi.dosDate)+1, // dos date
\r
91 ((LPWORD)&zi.dosDate)+0); // dos time
\r
93 // Trim path off file name
\r
94 string sFileName = f_file.substr(f_file.find_last_of(_T('\\')) + 1);
\r
96 // Start a new file in Zip
\r
97 if (ZIP_OK == zipOpenNewFileInZip(m_zf,
\r
106 Z_BEST_COMPRESSION))
\r
108 // Write file to Zip in 4 KB chunks
\r
109 const DWORD BUFFSIZE = 4096;
\r
110 TCHAR buffer[BUFFSIZE] = _T("");
\r
111 DWORD dwBytesRead = 0;
\r
113 while (ReadFile(hFile, &buffer, BUFFSIZE, &dwBytesRead, NULL)
\r
116 if (ZIP_OK == zipWriteInFileInZip(m_zf, buffer, dwBytesRead)
\r
117 && dwBytesRead < BUFFSIZE)
\r
124 bReturn &= (ZIP_OK == zipCloseFileInZip(m_zf));
\r
127 bReturn &= CloseHandle(hFile);
\r