Q&A

  • 폴더를 하나 압축하고 싶은데요
예를 들어 'D:\\Temp\'를 Temp.zip으로 압축하고 그것을 다시 Temp라는 이름의 폴더로 압축을 풀려고 하는데. 어떻게 해야 할 지 말씀좀 해주세요.
제가 지금 델파이 7을 사용하고 있어서 delzip은 사용할 수가 없다구 하더라구요.
찾은거중에.. STCabWriter1CabinetStatus, STCabReader1CabinetInfo라는 컴포넌트를 찾기는 찾았는데 어떻게 사용해야 할지를 모르겠네요. Zlib도 봤지만 이것 또한 어떻게 사용해야 하는지 모르겠습니다.
참고할 자료나 방법이나 예제 소스 좀 부탁드리겠습니다.
2  COMMENTS
  • Profile
    김대혁 2004.03.19 03:55


    DELZIP을 사용예제
    {******************************************************************************
    기능   : 파일압축함수
    input  : 대상 디렉토리,압축할 파일,생성될 압축파일
    output : 하나라도 압축된 것이 있으면 True
    example: W_Zip('c:\Temp\','*.txt','C:\Temp\All.Zip');
    ******************************************************************************}
    function W_Zip(cS_Path,cS_File,cZ_File :String):Boolean;
    var
            SearchRec       : TSearchRec;
            ZipMaster       : TZipMaster;
    begin
            Result := True;

            if Not DirectoryExists(cS_Path) then
            begin
            // 디렉토리를 확인한다.
                    Result := False;
                    Exit;
            end;

            ZipMaster := TZipMaster.Create(nil);
            ZipMaster.Load_Zip_Dll;
            ZipMaster.AddCompLevel := 9;
            ZipMaster.AddOptions   := [AddFreshen,AddUpdate];
            // 압축할 파일명 지정
            ZipMaster.ZipFilename := cZ_File;

            // 압축대상 파일명 크리어
            ZipMaster.FSpecArgs.Clear;

            // 파일을 압축대상에 추가
            if (FindFirst(cS_Path+cS_File,faAnyFile ,SearchRec) = 0) then
            Begin
                    ZipMaster.FSpecArgs.Add(cS_Path + SearchRec.Name);
                    While (FindNext(SearchRec) = 0) Do
                    Begin
                            ZipMaster.FSpecArgs.Add(cS_Path + SearchRec.Name);
                    end;
            end;

            FindClose(SearchRec);

            // 압축기 작업
            with ZipMaster do
            begin
                    Verbose:=True;
                    Trace:=False;
                    AddOptions:=[];
                    try
                            Add;
                    except
                            fn_MYes('Error','오류가 발생 하였습니다! ');
                            Result := False;
                    end;
            end;

            ZipMaster.Unload_Zip_Dll;
            ZipMaster.Destroy;

    end;

    {******************************************************************************
    기능   : W_UNZIP 에서 호출하는 함수 (하나의 ZIP 파일을 해체한다
    input  :
    output :
    example: W_UnZip('c:\Temp\','test.zip','C:\Temp\');
    ******************************************************************************}
    function W_UnZip(cS_Path,cS_File,Ds_Path :String):Boolean;
    var
            ZipMaster       : TZipMaster;
            SavePath        : String;
    begin
            // Extract 후 현재의 PATH가 ExtrBaseDir 로 변경 되기 때문에
            // 이것을 해결하기 위해 현재의 위치를 저장한다.

            Getdir(0,SavePath);

            Result := True;

            ZipMaster := TZipMaster.Create(nil);
            ZipMaster.Load_Unz_Dll;
            ZipMaster.ExtrBaseDir := dS_Path;

            // 압축할 파일명 지정
            ZipMaster.ZipFilename := cS_Path+cS_File;

            // 압축기 작업
            with ZipMaster do
            begin
                    Verbose := True;
                    Trace   := False;
                    try
                            ZipMaster.Extract;
                    except
                            fn_MYes('Error','오류가 발생 하였습니다! ');
                            Result := False;
                    end;
            end;

            chDIR(SavePath);
            ZipMaster.Unload_Unz_Dll;
            ZipMaster.Destroy;
    end;

    {******************************************************************************
    기능   : 파일압축해제 함수
    input  : 디렉토리,압축 파일,압축파일할 디렉토리
    output : 하나라도 압축해제된 것이 있으면 True
    example: W_Zip('c:\Temp\','*.Zip','C:\Temp\');
    ******************************************************************************}
    function W_CUnZip (cS_Path,cS_File,dS_Path :String):Boolean;
    var
            SearchRec       : TSearchRec;
    begin
            Result := True;
            // 파일을 압축대상에 추가
            if (FindFirst(cS_Path+cS_File,faAnyFile ,SearchRec) = 0) then
            Begin
                    W_UnZip(cS_Path,SearchRec.Name,dS_Path);
                    While (FindNext(SearchRec) = 0) Do
                    Begin
                            W_UnZip(cS_Path,SearchRec.Name,dS_Path);
                    end;
            end;
            FindClose(SearchRec);
    end;
  • Profile
    왕초보 2004.03.19 23:44
    답변 감사합니다. 답변이 늦었네요.<- 저의 답변.. 기분 나빠하실 것 같아서요.
    님이 올려주신 글을 보고 어떻게든 delzip을 설치해보려고 이곳 저곳 다닌 끝에 델파이 7에도 delzip을 쓸 수 있는 방법을 찾아내었어요.
    http://www.geocities.com/rjpeters_au/zipmaster.html --> 요기 가서 최신 버젼도 받았구요. 근데요... 이것을 어떻게 설치를 해야할지를 모르겠네요.
    install.txt에서 'Package file name:   ZipMaster',' Package description: Freeware Zip and Unzip package' 의 부분을 어떻게 진행해야 할지.. ZipMaster.dpk라는 파일을 찾을 수가 없네요. 이 부분을 어떻게 해결해야 할지 좀 말씀해주시면 안될까요. 그냥 빈칸으로 하고 진행하니깐.. 에러창이 뜨고 진행을 할 수가 없더라구요. 그럼 수고하시고요. 답변 정말 감사합니다. 많은 도움이 될 것 같아요. 아직 실행도 해보지 못했지만 (ㅠ.ㅠ)..
    그럼 좋은 하루 되세요.