[c++] 파일 압축 및 해제

파일을 압축하거나 해제하는 작업은 데이터 처리 및 저장에 매우 유용합니다. C++ 프로그램을 사용하여 파일을 압축하고 해제하는 방법을 알아보겠습니다.

파일 압축

C++에서 파일을 압축하기 위해서는 zlib과 같은 라이브러리를 이용할 수 있습니다. zlib은 데이터를 압축 및 해제하는 데 사용되는 라이브러리로, C++에서도 쉽게 활용할 수 있습니다.

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

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

int main() {
    const char* input_filename = "input.txt";
    const char* output_filename = "output.gz";
    const int chunk = 16384;

    gzFile out = gzopen(output_filename, "wb");
    FILE* in = fopen(input_filename, "rb");
    unsigned char buffer[chunk];
    int len = 0;

    while ((len = fread(buffer, 1, chunk, in)) > 0) {
        gzwrite(out, buffer, len);
    }

    fclose(in);
    gzclose(out);

    std::cout << "File compressed successfully" << std::endl;
    
    return 0;
}

위 코드는 input.txt 파일을 output.gz로 압축하는 과정을 보여줍니다.

파일 해제

압축된 파일을 해제하기 위해서는 마찬가지로 zlib을 사용할 수 있습니다. 아래는 압축 해제하는 간단한 예제 코드입니다.

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

int main() {
    const char* input_filename = "output.gz";
    const char* output_filename = "restored.txt";
    const int chunk = 16384;

    gzFile in = gzopen(input_filename, "rb");
    FILE* out = fopen(output_filename, "wb");
    unsigned char buffer[chunk];
    int len = 0;

    while ((len = gzread(in, buffer, chunk)) > 0) {
        fwrite(buffer, 1, len, out);
    }

    fclose(out);
    gzclose(in);

    std::cout << "File decompressed successfully" << std::endl;
    
    return 0;
}

위 코드는 output.gz 파일을 restored.txt로 해제하는 과정을 보여줍니다.

결론

C++에서 파일을 압축하고 해제하는 것은 zlib과 같은 라이브러리를 사용하여 비교적 간단하게 처리할 수 있습니다. 이를 통해 파일 시스템에서 데이터를 효율적으로 저장하고 전송할 수 있습니다.