가끔 ASP로 작업을 하다보면 파일을 압축하거나 압축해제를 해야하는 경우가 생깁니다. 그런데 ASP에서는 이런 기능을 제공하지 않기 때문에 서버용 콤포넌트를 개발해서 사용해야됩니다.
일반개발자들이 이런 서버용 콤포넌트를 개발하기란 쉽지 않습니다. 그래서 몇 군데 자료를 찾다가 괜찮은 압축처리 콤포넌트를 찾아 소개합니다.
첨부된 GZipLibrary.dll 파일을 다운로드 받아서 레지스트리에 등록해야합니다. 다운로드 받은 dll 파일의 경로는 아무곳이나 상관없지만 일반적으로 C:\Windows\System32 폴더나 C:\Windows\System 폴더에 복사를 한후 등록을 합니다.(일부 OS의 경우는 C:\Windows 폴더 대신 C:\WinNT 폴더)
레지스터리에 등록하는 방법은 다음과 같습니다.
시작 > 실행을 눌러서 열기항목에 regsvr32 [CGZipLibrary.dll 이 있는 폴더경로]\CGZipLibrary.dll 라고 입력하고 엔터를 누릅니다.
예를 들어서 C:\Windows\System32 폴더에 CGZipLibrary.dll 파일이 있다면
regsvr32 C:\Windows\System32\CGZipLibrary.dll
라고 입력해서 등록합니다.
ASP에서 압축 및 압축해제 처리하는 예제 소스는 아래와 같습니다.
[ASP 소스 예제]
<%
'=====================================================
' 압축
'=====================================================
Dim oZip
Set oZip = Server.CreateObject("CGZipLibrary.CGZipFiles")
' 압축할 파일을 추가합니다.
oZip.AddFile "C:\Inetpub\wwwroot\default.asp"
oZip.AddFile "C:\Inetpub\wwwroot\test.txt"
' 이렇게하면 폴더안의 모든파일/폴더 압축합니다.
'oZip.AddFile "C:\Inetpub\wwwroot\*.*"
' 압축 파일 이름을 지정합니다.
oZip.ZipFileName = "C:\Inetpub\wwwroot\ziptest\test.zip"
oZip.UpdatingZip = False
' 오류가 발생하면 오류 내용을 출력합니다.
If oZip.MakeZipFile <> 0 Then
Response.Write(oZip.GetLastMessage)
End If
Set oZip = Nothing
'=====================================================
' 압축 해제
'=====================================================
Dim oUnZip
Set oUnZip = Server.CreateObject("CGZipLibrary.CGUnzipFiles")
' 압축파일이름을 지정합니다.
oUnZip.ZipFileName = "C:\Inetpub\wwwroot\ziptest\test.zip"
' 압축파일 내용을 풀 경로를 지정합니다.
oUnZip.ExtractDir = "C:\Inetpub\wwwroot\ziptest\extractfolder"
' 오류가 발생하면 오류 내용을 출력합니다.
If oUnZip.Unzip <> 0 Then
Response.Write(oUnZip.GetLastMessage)
End If
Set oUnZip = Nothing
%>
참고한 정보들 입니다.
코드구루 zip/unzip 관련 글
http://www.codeguru.com/vb/gen/vb_graphics/fileformats/article.php/c6743/
위의 url에서 압축관련 모듈을 다운받으면 VB에서 실행해볼 수 있습니다. 압축풀면GZipLibrary.dll 파일이있는데 여기에 올린 파일은 코드구루에 있는 CGZipLibrary.dll 파일이 아주 조금 틀립니다. 코드구루의CGZipLibrary.dll 은 압축할때 디렉토리 경로까지 압축을 합니다.
원본 소스를 수정한 내용은 CGZipFiles.cls 파일에서 MakeZipFile 함수를 보면 iIgnorePath 부분 변수 사용한곳이있는데그곳의 값을 '1' 로 수정한후 재컴파일 하였습니다.
이 값은 0 과 1 두가지 옵션이 있는데 '0' 일 경우 디렉토리 경로까지 압축하고'1' 일경우엔 경로무시합니다.