2008-11-06 22 views
10

Tôi đang tìm kiếm một wrapper mà distills zlib tới:C++ cross-platform zlib simplifer-wrapper

  1. OpenZipFile()
  2. GetItemInfo (n)
  3. UnzipItem (n) // Bonus điểm để giải nén đệ quy nếu mục n là một thư mục.

Tôi thấy rất nhiều trình bao bọc xung quanh thư viện zlib trên codeproject.com nhưng tất cả đều là nền tảng cụ thể để cung cấp chức năng nền tảng cụ thể bổ sung cho giải nén vào bộ đệm/tệp/bộ nhớ.

+0

Vì vậy, bạn đã tìm thấy một dự án trên CodeProject mà những gì bạn muốn, điều duy nhất còn lại cho bạn cần làm là: FILE * file = fopen (tên tập tin, "wb"); fwrite (buf, buf_len, 1, file); fclose (tập tin); –

Trả lời

8

Trong kho lưu trữ nguồn zlib, có một đóng góp có tên là "minizip".

"minizip" là tập hợp các tệp bạn có thể sử dụng để phát với tệp .zip. dịch vụ cơ bản bạn cần đã có:

  • unzOpen
  • unzLocateFile
  • unzOpenCurrentFile
  • unzGetCurrentFileInfo
  • unzCloseCurrentFile
  • unzClose

Tất nhiên, đây không phải là hướng đối tượng (và tôi chắc chắn rằng đó không phải là mục tiêu của c reator của minizip), nhưng viết một wrapper hướng đối tượng đơn giản nên dễ dàng.

+0

Wow các tập tin được 8 tuổi! heheh! – leeand00

+0

Đó là trong cvs; vâng tôi đoán đó là những gì họ đã có để kiểm soát phiên bản sau đó .. – leeand00

+1

Hey tôi không quan tâm nếu nó 8 tuổi, nếu nó vẫn sẽ biên dịch tôi sẽ sử dụng nó! – leeand00

2

Bạn có thể thử lấy mã từ một dự án FOSS khác. Ví dụ, ScummVM có một vỏ bọc Zlib di động cao (implementation, header) với tất cả các chức năng bạn cần, cộng với một lớp OO để giao tiếp chung với bất kỳ loại lưu trữ nào khác.

Có thể đó là điểm khởi đầu tốt? Các hàm bao bọc là hoàn toàn độc lập và di động (heck, chúng thậm chí hoạt động trên Nintendo DS), nhưng lớp OO phụ thuộc vào nhiều lớp tùy chỉnh có thể khó thêm vào dự án của riêng bạn.

2

firstobject's easy zlib duy trì nền tảng chéo; nó có zlib trong một tệp đơn easyzlib.c và chỉ hiển thị các hàm ezcompress và ezuncompress với tính năng bổ sung để xác định yêu cầu bộ nhớ trước khi phân bổ kích thước chính xác.

11

Tăng cường :: iostreams có khả năng sử dụng định dạng zlib, gzip và bzip2.

Bạn tìm thấy nó từ http://www.boost.org/

+0

boost :: iostream :: zlib_compressor không tương thích với định dạng zip thực tế –

1

GZStream đáng xem. Đây là một vòng tròn cross-nền tảng tốt đẹp ZLib mở rộng các lớp STL iostream.

http://www.cs.unc.edu/Research/compgeom/gzstream/

là gì tốt đẹp về wrapper này hơn một số người khác là nếu bạn đang làm việc với tài liệu lưu trữ rất lớn, bạn không cần phải tải toàn bộ dữ liệu vào bộ nhớ.

+0

Xin chào, cái này trông rất đẹp! 7 tuổi ... Tôi sẽ cố gắng biên dịch nó. – craesh

1

Nếu bạn sử dụng minizip - hãy chú ý, phiên bản được chuyển đi với zlib 1.2.3 có giới hạn tệp nén là 2 GB. CNTT sẽ tạo mã zip có kích thước> 2GB - nhưng bạn sẽ không thể mở chúng ...

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