출처 - http://www.codeproject.com/Articles/7530/Zip-Utils-clean-elegant-simple-C-Win
참조 - http://blog.naver.com/binoz/40044276494
기본 사용법은 위의 사이트에서 참조.
여기서는 위의 오픈 소스를 이용해서
하위 폴더 및 하위 파일까지 압축 하는 방법을 설명
1. zip.h, zip.cpp, unzip.h, unzip.cpp 추가
일반적인 헤더와 소스 추가 방식으로 추가해주면 됨.
2.재귀 함수를 통한 하위 폴더 및 파일 압축
소스는 MFC방식으로 입력합니다.
다이얼로그에서 OK버튼 이벤트를 추가하고 OK버튼이 눌러지면
다음 함수가 실행이 되게끔 처리합니다.
//** OK버튼 이벤트
void CZipTestDlg::OnBnClickedOK()
{
ZRESULT zr;
HZIP hz;
ZIPENTRY ze;
//** 압축 결과물을 출력할 경로 및 파일 이름
hz = CreateZip(_T("C:¥¥Test¥¥FileName.zip"), 0);
//** 하위 폴더 및 파일 압축 함수
//** 첫번째 파라미터 : 압축할 폴더 경로
//** 두번째 파라미터 : 상위 폴더 경로 지정용(재귀 함수 호출 시 사용)
//** 압축파일에 대한 포인터(주소값)
GetFileList(_T("C:¥¥Copy¥¥Folder"), _T(""), &hz);
zr = CloseZip(hz);
//** 압축 해제
hz = OpenZip(_T("C:¥¥Test¥¥FileName.zip"), 0);
zr = SetUnzipBaseDir(hz, _T("C:¥¥Test"));
zr = GetZipItem(hz, -1, &ze);
int numitems = ze.index;
for (int i=0; i<numitems; i++) {
//** 압축 파일 인덱스 값 취득
zr = GetZipItem(hz, i, &ze);
if (zr != ZR_OK) {
CString tmp;
tmp.Format(_T("* Failed to get index %i of folders.zip"), i);
MessageBox(tmp, MB_OK);
}
zr = UnzipItem(hz, i, ze.name);
if (zr != ZR_OK) {
CString tmp;
tmp.Format(_T("* Failed to unzip item %i of folders.zip"), i);
MessageBox(tmp, MB_OK);
}
}
zr = CloseZip(hz);
}
//** 하위 폴더 및 파일 압축 함수(리커시브)
void CZipTestDlg::GetFileList(Cstring path, Cstring folder, HZIP *hz)
{
CFileFind file;
BOOL chi_bool = file.FindFile(path + _T("*.*"));
CString m_path = path;
CString m_FolderPath = folder;
while(chi_bool) {
ch_bool = file.FindNextFile();
CString strName = _T("");
if(file.IsArchived()) { //** 파일인 경우
strName = file.GetFileName();
CString tmpPathName = _T("");
CString tmpFolderPath = _T("");
if(strName.Compare(_T(".")) == 0 ||
strName.Compare(_T("..")) == 0 ||
strName.Compare(_T("Thumbs.db")) == 0) continue;
tmpPathName = m_path + _T("¥¥") + strName;
tmpFolderPath = m_FolderPath + _T("¥¥") + strName;
zr = ZipAdd(*hz, tmpFolderPath, tmpPathName);
} else if (file.IsDirectory()) { //** 폴더인 경우
strName = file.GetFileName();
CString tmpPathName = _T("");
CString tmpFolderPath = _T("");
if(strName.Compare(_T(".")) == 0 ||
strName.Compare(_T("..")) == 0 ||
strName.Compare(_T("Thumbs.db")) == 0) continue;
tmpPathName = m_path + _T("¥¥") + strName;
if(m_FolderPath.IsEmpty())
tmpFolderPath = strName;
else
tmpFolderPath = m_FolderPath + _T("¥¥") + strName; //** 상위 폴더 경로 저장
//** 압축파일 내에 폴더 경로 추가
zr = ZipAddFolder(*hz, tmpFolderPath);
//** 현재 함수 리커시브
GetFileList(tmpPathName, tmpFolderPath, hz);
}
}
}
댓글 없음 :
댓글 쓰기