C/C++ - 윈도우에서 zip 압축 풀기
Xzip을 이용해 윈도우에서 간단히 zip 압축 푸는 방법이다. 다양한 압축 라이브러리가 있지만 내가 찾아본 것 중에 Xzip 이 윈도우 전용이고 가장 간편한 것 같다. 다만 문서화가 되어 있지 않아서 데모 코드를 해석해서 사용법을 배워야 한다.
압축을 풀 때는 XUnzip.h
, XUnzip.c
두 파일만 있으면 된다.
Xzip이
#include "XUnzip.h"
int uncompress(char* src_filename) {
HZIP hz; // 압축 파일 핸들러
ZIPENTRY ze; // 압축 파일에 포함된 개별 파일을 나타내는 구조체
ZRESULT zr; // 결과(에러)
int n_of_entries; // 압축 파일에 포함된 파일들의 개수
int result = 0; // 이 함수의 반환값
// zip 파일 열기
hz = OpenZip(_T(src_filename), 0, ZIP_FILENAME);
if (! hz) {
std::cout << "File not found: " << src_filename << std::endl;
return 1; // means file not found
}
// zip 파일 정보 읽기 (-1 index)
memset(&ze, 0, sizeof(ze));
GetZipItem(hz, -1, &ze);
n_of_entries = ze.index;
// 압축 해제 루프
for (int i = 0; i < n_of_entries; ++i) {
memset(&ze, 0, sizeof(ze));
GetZipItem(hz, i, &ze);
zr = UnzipItem(hz, i, ze.name, 0, ZIP_FILENAME);
if (zr != ZR_OK) {
std::cout << "Uncompress failed: " << ze.index << "- " << ze.name << std::endl;
result = 2; // means some of the entries couldn't extracted.
} else {
std::cout << ze.index << "- " << ze.name << std::endl;
}
}
// close zip file
CloseZip(hz);
return result; // 0: success, 1: file not found, 2: fail some entries
}