[c++] 파일 압축 형식 지정

아래는 zlib을 이용하여 파일을 압축하는 간단한 예제 코드입니다.

#include <iostream>
#include <zlib.h>
#include <fstream>

int main() {
    const char* inputFileName = "input.txt";
    const char* outputFileName = "output.gz";

    // 파일 열기
    std::ifstream inputFile(inputFileName, std::ios::binary);
    std::ofstream outputFile(outputFileName, std::ios::binary);

    // 압축 스트림 초기화
    z_stream zs;
    zs.zalloc = Z_NULL;
    zs.zfree = Z_NULL;
    zs.opaque = Z_NULL;
    zs.next_in = Z_NULL;
    zs.avail_in = 0;
    int ret = deflateInit(&zs, Z_DEFAULT_COMPRESSION);
    
    // 압축된 데이터를 파일에 쓰기
    unsigned char outbuffer[1024];
    do {
        zs.next_out = outbuffer;
        zs.avail_out = sizeof(outbuffer);

        if (zs.avail_in == 0) {
            inputFile.read(reinterpret_cast<char*>(zs.next_in), sizeof(zs.next_in));
            zs.avail_in = inputFile.gcount();
        }
        
        ret = deflate(&zs, zs.avail_in ? Z_NO_FLUSH : Z_FINISH);
        outputFile.write(reinterpret_cast<const char*>(outbuffer), sizeof(outbuffer) - zs.avail_out);
    } while (ret != Z_STREAM_END);

    // 압축 스트림 종료
    deflateEnd(&zs);

    // 파일 닫기
    inputFile.close();
    outputFile.close();
  
    return 0;
}

위의 코드는 주어진 파일을 zlib을 사용하여 압축하는 과정을 나타냅니다. 파일을 열고, 압축 스트림을 초기화하고, 데이터를 읽어 압축한 후 새로운 파일에 씁니다.

덧붙여서, 반드시 필요한 경우가 아니면 C++ 스탠다드 라이브러리의 <filesystem> 또는 <fstream>을 사용해 파일 시스템과 파일을 처리할 수도 있습니다.

웹 사이트(www.zlib.net)에서 zlib에 대한 자세한 정보를 찾을 수 있습니다.