본문 바로가기
Borland

ZipBuilder에서 ExtractFileToStream()함수 사용법

by leo21c 2008. 12. 11.

With the ExtractFileToStream method you can extract a specified file from a Zip archive into a stream.

Function:

ExtractFileToStream( Filename: String ): TZipStream;

Description:

Extracts if specified file 'Filename' or else the first file specified in the FSpecArgs property from the archive specified by the ZipFileName property

After this method returns the stream position is at the begin of the stream.

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------

resource.zip 파일에는 eye.bmp외에 여러 bmp 파일이 들어있다.

eye.bmp 파일을 unzip해서 image1의 bitmap에 넣어주는 내용이다.

ExtractFileToStream()함수의 파라메터로 AnsiString Filename이 들어간다.

여기서 Filename은 zip 파일의 이름이 아니라 zip 파일 안에 압축되어 있는 내부 파일 이름을

나타낸다.

따라서 아래 sample을 보면 btnPic3Click을 하면 zip파일 안에 있는 eye.bmp을 UnzipToImage()함수로

넘기고 UnzipToImage()함수에서는 ExtractFileToStream()의 파라메터로 eye.bmp을 넣는다.

테스트 결과 zip파일 안에 있는 eye.bmp 파일을 unzip해서 stream에 넣어주고 그 내용을

Bitmap->LoadFromStream()을 통해 image1에 보이게 되는 것을 확인했다.

//---------------------------------------------------------------------------

void __fastcall TForm1::btnPic3Click(TObject* /*Sender*/)
{
UnzipToImage("eye.bmp");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::UnzipToImage(String FileName)
{
if(!ZipBuilder1->Busy)
{
ZipBuilder1->ZipFileName = "resource.zip";
ZipBuilder1->Password = "password";
TZipStream* Stream1 = ZipBuilder1->ExtractFileToStream(FileName);
Stream1->Position = 0; // reset to the beginning of the stream
StaticText1->Caption = "File Size: "+ IntToStr(Stream1->Size);
Image1->Picture->Bitmap->LoadFromStream(Stream1);
}
}

//---------------------------------------------------------------------------