Tôi đang cố gắng lưu trữ các tệp cho một ứng dụng đa nền tảng và có vẻ như Minizip (được xây dựng trên zlib) có tính di động như các trình lưu trữ đến.Làm cách nào để sử dụng Minizip (trên Zlib)?
Khi tôi cố gắng chạy mã giả sau đây, tuy nhiên, tôi nhận được một lỗi hệ thống [my executable] has stopped working. Windows can check online for a solution to the problem.
bất cứ ai có thể giúp tôi xem làm thế nào để sử dụng thư viện này? — (không có doc hay hướng dẫn bất cứ nơi nào mà tôi có thể tìm thấy)
zip_fileinfo zfi;
int main()
{
zipFile zf = zipOpen("myarch.zip",APPEND_STATUS_ADDINZIP);
int ret = zipOpenNewFileInZip(zf,
"myfile.txt",
&zfi,
NULL, 0,
NULL, 0,
"my comment for this interior file",
Z_DEFLATED,
Z_NO_COMPRESSION
);
zipCloseFileInZip(zf);
zipClose(zf, "my comment for exterior file");
return 0;
}
Specs: MSYS + MinGW, Windows 7, sử dụng zlibwapi.dll từ zlib125dll.zip/dll32
Điều này là tốt. Một vài vấn đề mặc dù: 1. Điều này giả định rằng toàn bộ tập tin có thể phù hợp với bộ nhớ, đó là một cái nhìn đơn giản, nhưng có lẽ đủ tốt cho mẫu này. 2. Không có lý do tại sao một đầu ra tập tin chiều dài 0 là một lỗi nếu chiều dài tập tin ban đầu là 0. 3. Giả sử rằng đó là một lỗi, không cần cho hoạt động ba giây. tức là 'if (zipWriteInFileInZip (zf, size == 0?" ": & buffer [0], size))' có thể được viết dưới dạng 'if (zipWriteInFileInZip (zf, & buffer [0], size))'. 4. Tôi khuyên bạn không nên sử dụng tiền tố gạch dưới. Tôi biết bạn đang sử dụng một chữ thường sau nó, nhưng ... * nhún vai * – Adrian
Điểm thứ hai và thứ ba bạn nâng cao là sai. Kích thước == 0 kiểm tra là để đảm bảo rằng bộ đệm [0] không được thực hiện trên độ dài bằng không. Phép logic hoặc hoạt động trong câu lệnh if sau đó đảm bảo rằng các tệp có độ dài bằng không được ghi vào tệp zip một cách chính xác, và sau đó một lần nữa, để đảm bảo rằng bộ đệm [0] không được gọi trên độ dài 0. Mã hoạt động chính xác và như mong đợi. – niemiro
Thẻ này được gắn thẻ là C chứ không phải C++. –