[c++] 파일 및 디렉토리 압축하기

파일 압축하기

파일을 압축하는 것은 주로 zlib 라이브러리를 사용하여 수행됩니다. zlib은 C++에서 압축 및 압축 해제를 지원하는 강력한 라이브러리입니다. 아래는 파일을 zlib을 사용하여 압축하는 간단한 예제 코드입니다.

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

int main() {
    const char* sourceFile = "input.txt";
    const char* compressedFile = "output.gz";
    const int bufferSize = 128 * 1024;
    unsigned char buffer[bufferSize];

    gzFile file = gzopen(compressedFile, "wb");
    FILE* source = fopen(sourceFile, "rb");

    int bytesRead = 0;

    while ((bytesRead = fread(buffer, 1, bufferSize, source)) > 0) {
        gzwrite(file, buffer, bytesRead);
    }

    gzclose(file);
    fclose(source);

    return 0;
}

위의 코드는 input.txt 파일을 output.gz 파일로 압축하는 예제입니다. 해당 예제를 실행하면 input.txt 파일이 output.gz로 압축됩니다.

디렉토리 압축하기

디렉토리를 압축하는 것은 libzip 라이브러리를 사용하여 수행할 수 있습니다. libzip은 C++에서 디렉토리 및 파일을 압축하고 해제할 수 있는 라이브러리입니다. 아래는 libzip을 사용하여 디렉토리를 압축하는 간단한 예제 코드입니다.

#include <iostream>
#include <zip.h>

int main() {
    const char* sourceDir = "input_directory";
    const char* compressedFile = "output.zip";

    zip_t* archive = zip_open(compressedFile, ZIP_CREATE | ZIP_EXCL, nullptr);

    zip_source_t* source = zip_source_file(archive, sourceDir, 0, 0);

    zip_file_add(archive, "input_directory", source, ZIP_FL_ENC_UTF_8);

    zip_close(archive);

    return 0;
}

위의 코드는 input_directory 디렉토리를 output.zip 파일로 압축하는 예제입니다.

이처럼 C++을 사용하여 파일 및 디렉토리를 압축하는 방법에는 zlib 및 libzip과 같은 라이브러리를 사용하는 방법이 있습니다. 위의 예제 코드를 참고하여 파일이나 디렉토리를 원하는 방식으로 압축할 수 있습니다.