2011-02-10 4 views
8

하나의 아카이브에 여러 파일을 압축하는 데 문제가 있습니다. 부스트 워드 프로세서는이 주제에 대해 매우 제한적이며 몇 시간 동안 웹을 검색했지만 솔루션을 찾을 수 없습니다.boost :: iostream zlib 여러 파일을 하나의 아카이브로 압축

무엇 내가 지금까지 가지고 :

boost::filesystem::ofstream ofsArchive("some.zip"); 
boost::iostreams::filtering_ostreambuf outFilter; 
boost::iostreams::zlib_params zparam(boost::iostreams::zlib::default_compression); 

try 
{ 
    // set up the filter 
    outFilter.strict_sync(); 
    outFilter.push(boost::iostreams::zlib_compressor(zparam)); 
    outFilter.push(ofsArchive); 


    for(each object of some kind) 
    { 
     // create a binary serialized file 
     boost::filesystem::ofstream ofs(filename, std::ios_base::binary); 
     boost::archive::binary_oarchive bin_oa(ofs); 
     bin_oa << crazyObject; 

     // here's where i'm stuck. how to add multiple files to the "some.zip"? 
     boost::iostreams::copy(ofs, outputArchive); 
    } 
} 
catch(boost::iostreams::zlib_error& e){...} 

어떻게 내가 우편 아카이브에 파일을 추가하는 방법은 무엇입니까? 제공된 메서드는 분명히 작동하지 않으며 문서 나 헤더 파일의 제목에서 아무 것도 찾을 수 없습니다.

답변

4

zlib은 Zip 파일 형식을 구현하지 않고 단지 Zip 내에서 사용되는 스트림 압축을 구현합니다 (the zlib FAQ 참조).). 내 지식 (나는 당신에게 경고해야한다)은 Boost가 Zip 아카이브를 읽거나 쓸 수있는 기능을 포함하지 않는다는 것이다. 해당 기능을 제공하는 라이브러리는 물론 입니다 (예 : zziplib) (참고 : 현재 사이트가 다운 된 것처럼 보입니다).

편집 : 분명히 zziplib 실제로 을 쓸 수 없으며 단지 읽을 수 있습니다. 아직도, 나는 약간의 인터넷 검색이 형식을 쓸 수있는 라이브러리를 만들 것이라고 확신한다.

0

나는 게시물이 약간 오래된 것으로 알고 있지만, 몇 년 후에 그것을 보는 나와 같은 사람들을 위해. ; infoZip (마지막 버전은 2008 년으로 거슬러 올라간다하지만, 정말 완벽하고 안전한 것 같다) -
가 :

작성하고 (물론 C++에서 사용 가능) C에서 zip 파일을 읽을 수있는 무료 librairies의 무리가 있습니다
- libzip 훨씬 더 최근 버전이며 마지막 버전은 불과 2 개월입니다.

관련 문제