[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에 대한 자세한 정보를 찾을 수 있습니다.