특정 폴더와 파일들을 압축하기

Posted by NUL PROG. : 2007. 7. 13. 21:58
이번 팁은 팁이 아닌 엽기행각일 수도 있다. -_-;

파일 압축에 대한 고민

보통의 데이터 파일의 압축은 델파이에 포함된 ZLIB를 사용하면 손쉽게 TStream 객체를 이용하여 다양한 포멧의 데이터들을 압축할 수 있기에 즐겨 사용하고 있다. 다만, 어떤 요구에 의해 사용자가 일반 압축 프로그램으로 데이터를 풀고자 희망할 때, 그러면서 동시에 많은 파일과 폴더 압축이 되어야 할 때 고민이 생긴다. 과연 이 하나의 기능을 위해 압축 컴포넌트를 설치하여 써야 한단 말인가. 특히나 자주 쓰지 않는 기능이라면, 언제나 최소한의 소스를 유지하고픈 잠재적 욕구에 의해 고민을 하지 않을 수 없다.

순간 보이는 빵 아이콘

사용자 삽입 이미지
빵집이라는 무료 공짜 공개 소프트웨어가 있다. 회사에 압축 프로그램 사달라고 떼쓰기도 거시기 하기에 납품하는 PC에 늘 설치하는 이 고마운 빵집. 그렇다. 언제나 PC와 윈도우즈 및 기본적은 프리웨어를 늘 설치해서 납품해왔던 것이다. 그렇다면, 걍 빵집을 쓰면 되겠네 -_-; 빵집을 열어 보았더니 스크립트를 제공하고 있다. 공개 소프트웨어를 만들고 배포하는 분들에게 무한의 공경심과 고마움을 느껴야 한다는 절대적 사실을 또 한 번 깨닫게 된다.

빵집 스크립트 파일 포멧

  1. 확장자는 bsz 이다.
  2. 세미콜론이 주석이다.
  3. Mode=Compress는 압축, Extract는 해제이다.
  4. ArchiveFile=압축 파일 경로+이름이며 <DATE>는 자동으로 날짜를 파일 이름에 붙여주고 <INDEX>는 동일 이름의 파일이 존재하면 파일 이름에 숫자를 추가한다.
  5. Progress.Caption=진행상황 윈도우의 캡션
  6. Progress.Text=진행상황 윈도우의 텍스트 메세지
  7. Files.RootPath=압축할 파일의 경로
  8. Files.Count=압축할 파일+폴더의 합
  9. Files.0=파일 이름 혹은 폴더 이름
  10. Files.1=파일 이름 혹은 폴더 이름
  11. Files.2=파일 이름 혹은 폴더 이름
  12. Extract.Path=압축을 해제할 때의 대상 경로
  13. After.Run=압축/해제의 완료후에 실행될 파일
구구절절이 설명을 달아 놓았지만 그냥 빵집에서 스크립트 생성해보고 그 파일을 읽어 보면 감이 잡힐 것이다 -_-;
사용자 삽입 이미지

빵집 스크립트 편집 화면


스크립트 파일을 생성해서 동작시키자

간단한 파일 압축 함수 예제(허접하니 고쳐서 쓰시라) procedure BackUp(ABackupFolder: String);
var
  szPath: String;
begin
  szPath := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
  with TStringList.Create do
  try
   Add(';BreadZip Script Version 1');
   Add('Mode=Compress');
   Add('ArchiveFile=' + IncludeTrailingPathDelimiter(ABackupFolder) + 'EX_<DATE><INDEX>.zip');
   Add('Progress.Caption=백업하련다');
   Add('Progress.Text=금방 되니 참고 기둘려라.');
   Add('Files.RootPath=' + szPath);
   Add('Files.Count=3'); // 3개를 압축
   Add('Files.0=config'); // config 폴더
   Add('Files.1=data'); // data 폴더
   Add('Files.2=EX.ini'); // ex.ini 파일
   SaveToFile(szPath + 'Ex_Compress.bzs');
   ShellExecute(0, 'Open', PChar(szPath + 'Ex_Compress.bzs'), '', '', SW_SHOW);
  finally
   Free;
  end;
end;
압축 해제할 때도 마찬가지의 방식으로 하면 된다.

자~ 이제 남은 건 고객의 PC에 무조건 빵집을 설치하는 일만 남은 것이다. 후후.....;