format.zip: 기본 사용법

주의 : 다음 예제는 파일 시스템에 접근이 가능한 대상에 적용됩니다 (neko/cpp/php 등등).
flash 용은 여기를 보세요. http://haxe.org/com/libs/format/zip/flash

ZIP 파일 만드는 법


textfile.txt 파일에는 "Hello zip!" 이라는 텍스트가 적혀있습니다. 이 텍스트 파일를 ZIP 파일로 만들어 봅시다.

1. ZIP파일의 엔트리 만들기


ZIP파일의 각 요소는 format.zip.Data.Entry 타입으로 만듭니다. 다음 방법으로 "Hello zip!" 문자열을 엔트리로 만듭니다 :
(주 : 여러 파일을 ZIP파일로 압축할 경우, 각각의 파일을 엔트리라고 하는 것 같습니다.)
var string = "Hello zip!"; 
// 문자열을 바이트형태로 전환
var bytes = Bytes.ofString(string); 
// 위 바이트에 대한 ZIP 엔트리 생성
var entry:format.zip.Data.Entry =  
{
    fileName : "path/to/textfile.txt", // <- 이것은 ZIP 파일 내부의 폴더 구조입니다.
    fileSize : bytes.length,
    fileTime : Date.now(),
    compressed : false,
    dataSize : 0,
    data : bytes,
    crc32 : format.tools.CRC32.encode(bytes),
    extraFields : new List()
}

원하는 경로로 ZIP파일 내부의 디렉토리를 자유롭게 생성할 수 있다는 점을 명심하세요.

2. ZIP파일의 엔트리 목록 생성하기


지금까지는 단일 파일 엔트리를 만들었습니다. 원하는 만큼 많은 엔트리를 만들 수도 있습니다. 엔트리들은 반드시 리스트(List)에 추가해야만 합니다 :
// 엔트리의 목록 List 생성
var entries:List<format.zip.Data.Entry> = new List();
// 위에서 만든 텍스트 엔트리를 추가.
entries.add(entry);
// 원하는 만큼 엔트리를 추가 가능.
// ...

3. ZIP 파일 저장


format.zip.Writer 클래스를 활용해 ZIP파일로 저장할 수 있습니다.
// BytesOutput 스트림과 연결된 format.zip.Writer에 엔트리를 작성합니다.
var bytesOutput = new BytesOutput();
var writer = new format.zip.Writer(bytesOutput);
writer.writeData(entries);
// 출력스트림으로부터 압축파일을 가져옵니다. 
var zipfileBytes = bytesOutput.getBytes();
// 압축파일을 하드디스크에 저장합니다.
var file = File.write("test.zip", true);
file.write(zipfileBytes);
file.close();

ZIP 파일 읽기


새로 생성한 test.zip파일을 읽는 방법에 대한 설명입니다.

4. Grabbing the list of entries out of the zip file


We start by reading the zip file and let the format.zip.reader get our entries out of it:
// Read our zip file and get the bytes into a BytesInput stream
var zipfileBytes = File.getBytes("test.zip");
var bytesInput = new BytesInput(zipfileBytes);
// use a format.zip.Reader to grab the zip entries
var reader = new format.zip.Reader(bytesInput);
var entries:List<format.zip.Data.Entry> = reader.read();        

As a result we have the same kind of list of entries as we saw in step 2 above.

5. Grabbing the data out of the zip entry


Now we can simply iterate our list of entries to search for the entry filename that we want to extract.
In step 1. above, we saved our string with the internal entry filename path/to/textfile.txt, so we have to search for this one among the entry filenames.
Here's a simplistic way of doing it:
var searchEntryFileName = "path/to/textfile.txt";
for (entry in entries ) {
    if (entry.fileName == searchEntryFileName) {
        // Get the bytes out of the entry and uncompress them
        var bytes:Bytes = format.zip.Tools.uncompress(entry.data);
        // Convert the bytes to a string
        var string = bytes.toString();
        // Should trace "Hello zip!"
        trace(string);
    }
}

version #19767, modified 2013-09-23 03:59:24 by papapang