|
제가 옛날에 만들어 두었던 건데, 쓸모가 있을 지 모르겠네요.
1. ZipBuilder와 관련 파일처리
//---------------------------------------------------------------------------
// 압축하기
// 하나의 압축파일에 여러개의 파일을 압축시킴
// z_name : 압축할 파일명
// t_name : 압축대상 파일명 (DOS의 *, ? 를 포함 가능)
void __fastcall Form1::ZipFile (String &z_name, String &t_name)
{
if ( FileExists (z_name) ) DeleteFile (z_name);
Zip->ZipFilename = z_name; //Zip은 ZipBuilder Component
Zip->Verbose = true;
// Add as many filespecs as we want to:
// (MS-DOS Wildcards are OK)
Zip->FSpecArgs->Add (t_name);
// Set the AddOptions; these also appear in Property Inspector:
// NOTE: This is the new "set" syntax
Zip->AddOptions = Zip->AddOptions << AddHiddenFiles;
Zip->AddOptions = Zip->AddOptions >> AddEncrypt; // no password
Zip->Add (); // do it!
}
//---------------------------------------------------------------------------
// 하나의 파일 압축 풀기
// z_name : 압축파일명
// t_name : 압축해제 대상 파일명 (DOS용 *, ? 사용가능)
// 전체인 경우는 "*.*"
void __fastcall Form1::UnzipFile (String &z_name, String &t_name)
{
if ( ! FileExists (z_name) ) return;
Zip->ZipFilename = z_name;
Zip->Verbose = true;
// We can specify as many filespecs as we want to extract:
// (MS-DOS Wildcards are OK)
Zip->FSpecArgs->Add (t_name);
// Set the ExtrOptions; these also appear in Property Inspector:
Zip->ExtrOptions = Zip->ExtrOptions << ExtrOverWrite;
Zip->Extract (); // do it!
}
//---------------------------------------------------------------------------
2. 메모리 상에서 ZipBuilder 이용하기
// 스트림 압축
// TZipBuilder *Zip : ZipBuilder Component
// TMemoryStream *zip_stream : 압축하고자 하는 스트림
// TMemoryStream *ziped_stream : 압축된 스트림
zip_stream->Position = 0;
Zip->AddStreamToStream (zip_stream); // zip_stream을 추가하면, 압축된 스트림이 ZipBuilder 컴포넌트 내의 멤버 ZipStream에 저장됨
ziped_stream->Clear ();
ziped_stream->LoadFromStream (Zip->ZipStream);
// 스트림 압축해제
// TMemoryStream *ziped_stream : 압축된 스트림
// TMemoryStream *unzip_stream : 압축해제된 스트림
ziped_stream->Position = 0;
Zip->ExtractStreamToStream (ziped_stream); // 압축해제하면, ZipStream에 압축해제된 스트림 존재함
unzip_stream->Clear ();
unzip_stream->LoadFromStream (Zip->ZipStream);
일단 위에 거는 참조하시고요.
원하시는 기능이 없는 파일을 메모리상에서 생성해서 압축하고자 한다면 TFileStream을 이용하면 됩니다.
위의 예에서 TMemoryStream 대신에 TFileStream을 하시면 되져 (ziped_stream, unzip_stream을 이야기하는 것입니다.).
현정환 님이 쓰신 글 :
: 안녕하세요..
:
: zipbuilder 를 사용하려고 합니다..
:
: 예를 들어서 aaa.txt 라는 놈이 있고..
:
: 이 파일을 aaa.zip 에 압축을 하고 싶습니다.
:
: ZipBuilder1->ZipFileName = "aaa.zip" 이라고 주면..
:
: aaa.zip 이 원래 있는 파일일 경우는 상관 없는데
:
: 없는 파일이면 에러가 뜹니다.
:
: 제가 궁금한건 원래 없는 파일을 생성해서 압축을 하려면 어떻게 해야 하죠 ..?
|