[개발/delphi] 델파이 zlib 를 이용한 파일압축
// TCompressionStream 사용법
출처: http://wearethebest.co.kr/zbxe/3081
파일의 압축을 예로 들면 대강 다음과 같습니다..
1. 원본 파일 스트림을 생성한다.
2. 압축될 복사본 파일 스트림을 생성한다.
3. TCompressionStream 스트림 을 생성한다. 이 때 복사본 파일 스트림을 인자로 준다.
4. TCompressionStream에 원본 파일을 써 준다.
5. 생성한 스트림들을 해제한다.
압축된 파일을 읽을 때는 다음 순서가 되구요..
1. 압축된 원본 파일 스트림 생성.
2. 압축이 풀릴 복사본 파일 스트림 생성.
3. TDecompressionStream을 생성. 이 때 압축된 원본 파일 스트림을 인자로 준다.
4. TDecompressionStream 의 Read 메소드를 리턴값이 0일 때 까지 계속 호출해 해당 데이터를 복사본 파일 스트림에 쓴다.
5. 생성한 스트림들을 해제한다.
Uses
... , ZLib;
// 파일의 압축
procedure ShrinkFile(Const Src, Dest : String;
CompressionLevel: TCompressionLevel);
var
InFile: TStream;
OutFile: TStream;
ZStream: TCustomZLibStream;
begin
InFile := TFileStream.Create(Src, fmOpenRead);
try
OutFile := TFileStream.Create(Dest, fmCreate);
try
ZStream := TCompressionStream.Create(CompressionLevel, OutFile);
try
ZStream.CopyFrom(InFile, 0);
finally
ZStream.Free;
end;
finally
OutFile.Free;
end;
finally
InFile.Free;
end;
end;
// 파일의 압축 해제
procedure ExpandFile(Const Src, Dest : String);
const
BufferSize = 4096;
var
InFile: TStream;
OutFile: TStream;
ZStream: TCustomZLibStream;
Buffer: array[0..BufferSize-1] of Byte;
Count: Integer;
begin
InFile := TFileStream.Create(Src, fmOpenRead);
try
OutFile := TFileStream.Create(Dest, fmCreate);
try
ZStream := TDecompressionStream.Create(InFile);
try
while True do
begin
Count := ZStream.Read(Buffer, BufferSize);
if Count <> 0 then
OutFile.WriteBuffer(Buffer, Count)
else Break;
end;
finally
ZStream.Free;
end;
finally
OutFile.Free;
end;
finally
InFile.Free;
end;
end;
반응형
'Delphi, RadStudio' 카테고리의 다른 글
[개발/delphi] 델파이 - Object Pascal 강좌 (0) | 2012.01.18 |
---|---|
[개발/delphi] 인터넷 연결 목록을 추적하기 (0) | 2012.01.17 |
[개발/delphi] 64bit OS 판별 (1) | 2012.01.13 |
[개발/delphi] 64bit 시스템 디렉토리 가져오기 (0) | 2012.01.13 |
[개발/delphi] 키를 눌러 반복문 종료하기 (0) | 2012.01.11 |
댓글