요즘 7Zip을 많이 쓰시던데...

이건 ZLIB입니다.

참고해주세요^^


1. 간단히 사용할 수 있는 Zip압축(zlib) [ 예제)Test ZLIB.zip ]

 아래와 같이 Test폴더 내에 있는 CTestDlg::OnInitDialog()에 있는 다음 네줄만으로 압축및 해제가 가능합니다.

 물론 ../ZipUnzip/zlib/zlibstat.lib 를 추가해 줘야합니다.

 최신 라이브러리(zlib)는 http://www.winimage.com/zLibDll/에서 다운로드 할 수 있습니다.

 

 CZipper::ZipFile("readme.txt");//Zip파일로 변환

 CUnzipper aaa;
 aaa.OpenZip("readme.zip");//변환된 Zip파일을 Open
 aaa.UnzipTo("aaa");//aaa 폴더에 UnZip

 

2. 비밀번호 변경이 가능한 압축 [ 예제)zip_src.zip ]

 핵심 클래스는 CZipArchive이다.

 이것을 사용하는 가장 간단한 방법은 프로젝트를 디펜던시하는 것이 가장 사용하기 간단합니다.

아래와 같이 사용하면 됩니다.

 CZipArchive m_Zip;

 //압축

 m_Zip.Open("zzz.zip", CZipArchive::create);
 m_Zip.SetPassword("123");
 m_Zip.AddNewFile("ReadMe.txt");
 m_Zip.Close();

 

 //압축 풀기

 CString sss=".";//폴더 지정
 m_Zip.Open(GetString(IDS_ZIP_FILE_PATH), CZipArchive::openReadOnly);
 m_Zip.SetPassword("123");
 for (WORD i = 0; i < m_Zip.GetNoEntries(); i++)
     m_Zip.ExtractFile(i, sss);
 m_Zip.Close();


Posted by 띠깜
TAG , ,

댓글을 달아 주세요

  1. LiveREX 2010.01.30 18:29 신고  댓글주소  수정/삭제  댓글쓰기

    제가 초대장 드린분들 중에 제일 활성화되어 있어서 저도 기분이 참 좋네요 ^^
    좋은 내용 오늘도 잘 보고 갑니다 ^^

    • 띠깜 2010.01.31 02:40 신고  댓글주소  수정/삭제

      LiveREX 님 덕분에 좋은 블로그 이용할 수 있어서 좋네요^^
      정말 감사합니다~
      인사를 길게 드려야하는데 시간이 너무 늦어서 마음으로 전하겠습니다.
      님 블로그에 자주 놀러가겠습니다^^*

  2. 모도롤라 2010.05.02 20:58  댓글주소  수정/삭제  댓글쓰기

    감사합니당 ㅜ.ㅜ 퍼가용~~

  3. pelix 2010.08.24 23:54  댓글주소  수정/삭제  댓글쓰기

    정말 유용한 소스였습니다.
    그런데 제가 테스트 해보니..
    폴더-폴더1-폴더11-폴더111
    -폴더2-폴더21-폴더221

    이렇게 다중 폴더의 구조는 압축은 잘 되지만
    압축이 풀리지 않는 문제가 있었습니다.
    압축을 풀 때 사용한 함수는 UnzipTo 였구요..
    하지만 디버깅 해 보니 UnzipFile 이 문제더군요

    아래처럼 수정하는 다중폴더 구조도 잘 풀렸습니다.
    혹시 다른 버그가 생겼을지도 모릅니다만.. 다중폴더, 단일폴더, 단일파일
    모두 정상 작동하였습니다..
    수고하세요 ^^

    bool CUnzipper::UnzipFile(LPCTSTR szFolder, bool bIgnoreFilePath)
    {
    if (!m_uzFile)
    return FALSE;


    //////////////////////////////////////////////////////////////
    // 수정 시작
    //////////////////////////////////////////////////////////////
    //if (!szFolder) // 원본
    if(szFolder == NULL) // 수정본
    szFolder = m_szOutputFolder;
    else
    {
    memset(m_szOutputFolder, 0x00, sizeof(m_szOutputFolder));
    _tcsncpy(m_szOutputFolder, szFolder, strlen(szFolder));
    }
    // 여기까지 추가

    if (!CreateFolder(szFolder))
    return FALSE;

    UZ_FileInfo info;
    GetFileInfo(info);

    // if the item is a folder then create it and return 'TRUE'
    if (info.bFolder)
    {
    char szFolderPath[MAX_PATH];
    _makepath(szFolderPath, NULL, m_szOutputFolder, info.szFileName, NULL);

    // SEE
    // return CreateFolder(szFolderPath);// 원본
    bool bRet = CreateFilePath(szFolderPath);// 수정본
    return bRet;
    }
    ////////////////////////////////////////////////////////////// // 수정 완료
    //////////////////////////////////////////////////////////////