2008-11-04 38 views
27

Tôi muốn có thể nén các tệp từ ứng dụng C/C++ không phải của mình trên một số phiên bản Windows, Linux/Unix và MacOS.thư viện zip di động cho C/C++ (không phải là một ứng dụng)

Người dùng sẽ biên dịch và chạy bằng ứng dụng này bằng Eclipse + makefile hoặc VisualStudio. Tôi không muốn người dùng phải cài đặt một cái gì đó riêng biệt, hoặc có thực thi cài đặt makefile của tôi.

Ưu tiên nguồn mở. Tôi đã xem "Zip 3.0" ...

+6

Có lẽ do 'zip' bạn có nghĩa là nén và không chỉ nén/lưu trữ? Hầu hết các câu trả lời ở đây khuyên bạn nên zlib nhưng theo zlib trang web của mình một mình không hỗ trợ zip lưu trữ http://www.zlib.net/zlib_faq.html#faq11 –

Trả lời

5

Chúng tôi đã sử dụng zlib một vài lần tại đây. Đó là một thư viện khá chuẩn có triển khai trong hầu hết các ngôn ngữ chính.

+5

Tôi không nghĩ rằng zlib có thể tạo một kho lưu trữ ZIP bao gồm nhiều các tập tin.Đó là một thư viện nén và cũng bao gồm các hàm để tạo một tệp (theo cách thức của gzip). –

0

ZLIB - thư viện di động nhất trên thế giới. nguồn mở, rất được chứng minh và đáng tin cậy. Tiêu chuẩn vàng. tại sao lại sử dụng bất kỳ thứ gì khác?

+25

... vì nó không xử lý * tệp zip *? Nó chỉ xử lý nén luồng. – BastiBen

+7

Trong thư mục controb/minizip có các tiện ích zip. – Cheeso

+1

@Cheeso Tôi nghĩ bạn nên đề cập đến điều đó. Tôi đã không nhận ra minizip đã được bao gồm với zlib, bên cạnh đó có rất nhiều goodies khác trong 'contrib'. Vì vậy, tôi cảm thấy bạn có thể chỉnh sửa câu trả lời của bạn để có một chút hữu ích hơn. – leetNightshade

1

Những người khác đã đề cập đến zlib, rất đẹp và khá dễ dàng.

7-Zip (LZMA) SDK phức tạp hơn nhưng cũng có tỷ lệ nén rất tốt.

Chỉnh sửa: Mặc dù vẫn đang trong quá trình phát triển, với quy trình phát hành và lịch sử theo thời gian, tôi sẽ do dự khi đề xuất điều này ngay bây giờ.

+0

Từ tài liệu có vẻ như nó chỉ hỗ trợ lưu trữ ở định dạng 7z. Điều này có thật không? – pqnet

+0

@pqnet - Tôi sử dụng 7zip. Nó hoạt động với bất kỳ định dạng nén (zip, 7zip, pkzip, tar, ... vv, vv) Tôi pháo đề nghị các API tại thời điểm này là tôi đã không sử dụng nó, nhưng các ứng dụng 7zip làm việc tuyệt vời. – ryyker

11

Hãy xem Libarchive. Tôi đã dành rất nhiều thời gian tìm kiếm một thư viện đa nền tảng và LGPL được cấp phép với giao diện thuận tiện. Điều này là tốt nhất của tất cả những gì tôi đã nhìn thấy. Công cụ rất dễ dàng và mạnh mẽ. Được thiết kế ban đầu cho các hệ thống giống Unix nhưng cũng có the Windows version.

+0

Rất dễ tìm. Cám ơn vì đã chia sẻ. Tài liệu tuyệt vời. – Homer6

+0

Bạn có thể vui lòng giúp tôi về việc cài đặt libarchive, tôi hiện đang sử dụng VS2013 và tôi nhận được lỗi này 'MSB6006:" cmd.exe "đã thoát với mã -1073741571.', khi tôi * Rrebuild Solution * tạo ra' libarchive.sln' sau khi làm theo [các bước sau] (https://github.com/libarchive/libarchive/wiki/BuildInstructions#windowsvisual-studio). – ABCmo

+0

Xin lỗi, tôi e rằng tôi không thể trợ giúp, tôi không có bất kỳ máy chạy Windows nào có sẵn ngay bây giờ. Tôi muốn đề nghị các nhà phát triển libarchive giúp đỡ. – Dmitry

3

Tôi đã có kết quả tuyệt vời với miniz: https://code.google.com/p/miniz/

Đối với một nén đơn giản của chuỗi trong C++, tôi cũng thực sự thích Timo Bingmann's solution.

+0

Một phiếu bầu cho miniz. Thư viện tập tin đơn tốt. Có giải nén lưu trữ .zip hoạt động nhanh chóng. –

5

tôi khuyên bạn nên ZipLib https://bitbucket.org/wbenny/ziplib/wiki/Home

lý do cá nhân do tại sao tôi yêu dự án này:

  • xây dựng xung quanh C++ 11 stl suối (.! Cũ decompresses vào suối STL)
  • trọng lượng nhẹ (không phụ thuộc ngoài zlib)
  • có thể được sử dụng trên cả hai cửa sổ & liunx

Tôi mất nhiều thời gian để tìm dự án này - hy vọng điều này sẽ giúp người khác.

+0

Không thể xem cách tôi mở một kho lưu trữ ZIP mà tôi có trong bộ nhớ đệm. Hoặc trên đĩa trong WinNT, 'tên tập tin koz sẽ nằm trong std :: wstring và không có API để lấy nó. – hypersw

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