2011-02-10 21 views
8

Tôi gặp sự cố khi đóng gói một loạt tệp vào một tệp lưu trữ. tài liệu tăng rất hạn chế về chủ đề này và tôi đã tìm kiếm trên web trong vài giờ, nhưng tôi không thể tìm thấy giải pháp.boost :: iostream zlib nén nhiều tệp vào một kho lưu trữ

gì tôi có cho đến nay:

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){...} 

làm thế nào để thêm các tập tin vào kho lưu trữ zip? phương pháp được cung cấp rõ ràng không hoạt động, tôi không thể tìm thấy bất kỳ nội dung nào trong chủ đề trong tài liệu hoặc tệp tiêu đề

Trả lời

4

zlib không triển khai định dạng tệp Zip, nó chỉ thực hiện nén luồng được sử dụng trong Zip (xem the zlib FAQ). Theo hiểu biết của tôi (mà tôi nên cảnh báo bạn là không có nghĩa là tổng số), Boost không bao gồm chức năng đọc hoặc ghi lưu trữ Zip. Có những thư viện cung cấp chức năng đó tất nhiên, ví dụ: zziplib (lưu ý: trang web hiện có vẻ không hoạt động).

Chỉnh sửa: Rõ ràng, zziplib thực sự không thể ghi tệp Zip, nó chỉ có thể đọc chúng. Tuy nhiên, tôi chắc chắn một chút googling sẽ bật lên một thư viện có khả năng viết các định dạng.

0

Tôi biết bài đăng có một chút cũ, nhưng đối với những người như tôi, những người nhìn thấy nó sau nhiều năm.

Có một loạt các librairies miễn phí để viết và đọc các file zip trong C (có thể sử dụng trong C++ tất nhiên):
- infoZip (phiên bản cuối cùng có vẻ là thực sự hoàn chỉnh và an toàn, mặc dù nó ngày trở lại vào năm 2008);
- libzip, gần đây hơn, phiên bản cuối cùng chỉ được hai tháng tuổi.

Các vấn đề liên quan