Libzipppは、Libzipライブラリ周辺のシンプルな基本的なC ++ラッパーです。これは、郵送可能で使いやすいライブラリであることを意図しています。
編集には次のようにテストされています。
基礎となるライブラリ:
利用可能な圧縮方法の詳細については、こちらを参照してください。
libzipppはVCPKGに移植されているため、実行して非常に簡単に統合できます。
./vcpkg install libzippp
このライブラリでは、少なくともC ++ 11をコンパイルする必要があります。
Linux
zlib1g-dev 、 libzip-dev 、 liblzma-dev 、 libbz2-devなど)。make librariesを実行してMakeFileを使用することが可能です。Windows:
すべてのオペレーティングシステム
LIBZIPPP_ENABLE_ENCRYPTIONを介してlibzipppで有効にする必要があります。mkdir build
cd build
cmake ..
make
make installmkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=ReleaseAdd Cache Entryをクリックして、MSVCを使用して構築されていない場合はCMAKE_BUILD_TYPEを追加しますConfigureとGenerateをクリックします-DCMAKE_PREFIX_PATH=<...> CMAKE_PREFIX_PATHディレクトリに設定する必要があります。-DCMAKE_PREFIX_PATH=/home/user/libzip-1.11.2:/home/user/zlib-1.3.1make && make installINSTALLターゲットを構築します。 cmake -DNAME=VALUE <other opts>またはcmake guiまたはccmakeをAdd Cache EntryてCmake -dname = value <other opts>として設定します。
LIBZIPPP_INSTALL :libzipppのインストールを有効/無効にします。 add_subdirectory経由で使用する場合、デフォルトはオフ、その他LIBZIPPP_INSTALL_HEADERS :libzipppヘッダーのインストールを有効/無効にします。 add_subdirectory経由で使用する場合、デフォルトはオフ、その他LIBZIPPP_BUILD_TESTS :ビルディングLibzipppテストを有効/無効にします。 add_subdirectory経由で使用する場合、デフォルトはオフ、その他LIBZIPPP_ENABLE_ENCRYPTION :暗号化機能を備えたLibzipppの構築を有効/無効にします。デフォルトはオフです。LIBZIPPP_CMAKE_CONFIG_MODE :libzipインストールされたcmake configファイルを使用して建物を有効/無効にします。デフォルトはオフです。LIBZIPPP_GNUINSTALLDIRS :gnuinstalldirsから取得したインストールディレクトリを使用して建物を有効/無効にします。デフォルトはオフです。CMAKE_INSTALL_PREFIX :プロジェクトをインストールする場所CMAKE_BUILD_TYPE :最適化の有無にかかわらずリリースまたはデバッグするように設定CMAKE_PREFIX_PATH :インストールされたlibs forこれで使用するリブの接頭辞パス( libを含むパスとフォルダーinclude )のコロン分離リストのリストBUILD_SHARED_LIBS :オンまたはオフに設定して共有または静的libsを構築するには、設定されていない場合はプラットフォームのデフォルトを使用しますインストールされたら、libzipppは任意のCmakeプロジェクトから簡単に使用できます。
( CMAKE_INSTALL_PREFIX経由で)標準の場所にインストールされた場合、またはそのインストールプレフィックスがプロジェクトに渡されたことを考えると、 CMAKE_PREFIX_PATHは、 find_package(libzippp 3.0 REQUIRED)を呼び出し、 libzippp::libzipppに対するリンクを呼び出すことができます。
cmakeを使用してlibzipppを消費しない場合は、そのインクルードディレクトリをコンパイラに渡し、 libzippp.{a,so}に対してリンクする必要があります。 lib/libzip-1.11.2/lib/.libs/ )のlibzipライブラリEGに対してリンクすることも忘れないでください。 G ++との編集の例:
g++ -I./src
-I./lib/libzip-1.11.2/lib I./lib/libzip-1.11.2/build
main.cpp libzippp.a
lib/libzip-1.11.2/lib/.libs/libzip.a
lib/zlib-1.3.1/libz.aバージョン1.5以来、Libzipは、静的コンパイルに必要な基礎となる暗号ライブラリ(OpenSSL、GNUTLS、またはCommonCrypto)を使用しています。デフォルトでは、libzipppはテストをコンパイルするためにデフォルトフラグとして-lssl -lcrypto (openssl)を使用します。これはmake CRYPTO_FLAGS="-lsome_lib" LIBZIP_CMAKE="" testsを使用して変更できます。
Libzip cmakeのファイルは、使用する暗号化ライブラリを自動的に検出するため、デフォルトではすべての許可されたライブラリがMakeFileのLIBZIP_CMAKE変数で明示的に無効になっています。
詳細については、こちらをご覧ください。
最も簡単な方法は、Zlib、Libzip、Libzipppのソースをダウンロードし、Cmake GUIを使用して各ライブラリを順番に構築することです。
Sourceをポイントし、その内部に新しいフォルダービルドにbuild BuildGenerateを実行しますしかし、これを自動化するのに役立つ準備されたバッチファイルもあります。ただし、調整が必要になる場合があります。
Cmake 3.20( cmake.exeがパスにある必要がある)とMS Visual Studioを持っていることを確認してください。
libzippp- <bersion> -windows-ready_to_compile.zipファイルをリリースからダウンロードし、システムのどこかに抽出します。これにより、準備された構造が作成されるため、必要なライブラリとともにlibzipppをコンパイルできます。
libに適用するパッチがあるかどうかを確認してください。一部のファイルは、バージョンに応じて、LibzipのC89では編集できない場合があります。
compile.batファイルを実行するだけです。これにより、 Zlib 、 Libzip 、および最後にLibzipppがコンパイルされます。
LibzIppPテストを実行できるように、リリースフォルダーとデバッグフォルダーを含むDISTフォルダーがあります。
Cmake 3.10( cmake.exeがパスにある必要があります)とMS Visual Studio 2012があることを確認してください。
libzipとzlibのソースをダウンロードし、それらを「lib」フォルダーに抽出します。次の構造になってしまうはずです。
libzippp/compile.bat
libzippp/lib/zlib-1.3.1
libzippp/lib/libzip-1.11.2
compile.batを実行します(単にダブルクリックするだけです)。コンピレーションはエラーなしで移動する必要があります。
LibzIppPテストを実行できるように、リリースフォルダーとデバッグフォルダーを含むDISTフォルダーがあります。
libzippp.dllとlibzippp.libを使用してライブラリを動的にリンクするか、 libzippp_static.libを使用して静的にリンクできます。 Zlibとlibzipppも静的にリンクしない限り、実行可能ファイルでパッケージ化されたDLLが必要です。
APIは非常に簡単なことを意図しています。フランス語の説明はここにあります。
# include " libzippp.h "
using namespace libzippp ;
int main ( int argc, char ** argv) {
ZipArchive zf ( " archive.zip " );
zf. open (ZipArchive::ReadOnly);
vector<ZipEntry> entries = zf. getEntries ();
vector<ZipEntry>::iterator it;
for (it=entries. begin () ; it!=entries. end (); ++it) {
ZipEntry entry = *it;
string name = entry. getName ();
int size = entry. getSize ();
// the length of binaryData will be given by 'size'
void * binaryData = entry. readAsBinary ();
// the length of textData will be given by 'size'
string textData = entry. readAsText ();
// ...
}
zf. close ();
return 0 ;
}バッファから直接アーカイブを作成することもできます
# include " libzippp.h "
using namespace libzippp ;
int main ( int argc, char ** argv) {
char * buffer = someData;
uint32_t bufferSize = sizeOfBuffer;
ZipArchive* zf = ZipArchive::fromBuffer (buffer, bufferSize);
if (zf!= nullptr ) {
/* work with the ZipArchive instance */
zf-> close ();
delete zf;
}
return 0 ;
}# include " libzippp.h "
using namespace libzippp ;
int main ( int argc, char ** argv) {
ZipArchive zf ( " archive.zip " );
zf. open (ZipArchive::ReadOnly);
// raw access
char * data = ( char *)zf. readEntry ( " myFile.txt " , true );
ZipEntry entry1 = zf. getEntry ( " myFile.txt " );
string str1 (data, entry1. getSize ());
// text access
ZipEntry entry2 = zf. getEntry ( " myFile.txt " );
string str2 = entry2. readAsText ();
zf. close ();
return 0 ;
}# include " libzippp.h "
using namespace libzippp ;
int main ( int argc, char ** argv) {
ZipArchive zf ( " archive.zip " );
zf. open (ZipArchive::ReadOnly);
ZipEntry largeEntry = z1. getEntry ( " largeentry " );
std::ofstream ofUnzippedFile ( " largeFileContent.data " );
largeEntry. readContent (ofUnzippedFile);
ofUnzippedFile. close ();
zf. close ();
return 0 ;
}# include " libzippp.h "
using namespace libzippp ;
int main ( int argc, char ** argv) {
ZipArchive zf ( " archive.zip " );
zf. open (ZipArchive::Write);
# ifdef LIBZIPPP_USE_BZIP2
// Advanced usage : change the compression method. Default is DEFLATE.
zf. setCompressionMethod (entry, CompressionMethod::BZIP2);
# endif
zf. addEntry ( " folder/subdir/ " );
const char * textData = " Hello,World! " ;
zf. addData ( " helloworld.txt " , textData, 12 );
zf. close ();
return 0 ;
}# include " libzippp.h "
using namespace libzippp ;
int main ( int argc, char ** argv) {
ZipArchive zf ( " archive.zip " );
zf. open (ZipArchive::Write);
zf. deleteEntry ( " myFile.txt " );
zf. deleteEntry ( " myDir/subDir/ " );
zf. close ();
return 0 ;
}# include " libzippp.h "
using namespace libzippp ;
class SimpleProgressListener : public ZipProgressListener {
public:
SimpleProgressListener ( void ) {}
virtual ~SimpleProgressListener ( void ) {}
void progression ( double p) {
cout << " -- Progression: " << p << endl;
}
};
int main ( int argc, char ** argv) {
ZipArchive zf ( " archive.zip " );
/* add/modify/delete entries in the archive */
// register the listener
SimpleProgressListener spl;
zf. addProgressListener (&spl);
// adjust how often the listener will be invoked
zf. setProgressPrecision ( 0.1 );
// listener will be invoked
zf. close ();
return 0 ;
}# include " libzippp.h "
using namespace libzippp ;
int main ( int argc, char ** argv) {
// important to use calloc/malloc for the fromWritableBuffer !
void * buffer = calloc ( 4096 , sizeof ( char ));
ZipArchive* z1 = ZipArchive::fromWritableBuffer (&buffer, 4096 , ZipArchive::New);
/* add content to the archive */
// updates the content of the buffer
z1-> close ();
// length of the buffer content
int bufferContentLength = z1-> getBufferLength ();
ZipArchive::free (z1);
// read again from the archive:
ZipArchive* z2 = ZipArchive::fromBuffer (buffer, bufferContentLength);
/* read the archive - no modification allowed */
ZipArchive::free (z2);
// read again from the archive, for modification:
ZipArchive* z3 = ZipArchive::fromWritableBuffer (&buffer, bufferContentLength);
/* read/write the archive */
ZipArchive::free (z3);
free (buffer);
return 0 ;
}デフォルトでは、エラー処理はかなり基本的であり、エラーの詳細はstderrにダンプされます。ただし、この動作をオーバーライドするコールバック方法を提供することができます。コンテキストが必要な場合は、 std::bindまたはlambda-functionsを使用できます。
# include " libzippp.h "
using namespace libzippp ;
int main ( int argc, char ** argv) {
ZipArchive zf ( " archive.zip " );
zf. setErrorHandlerCallback ([]( const std::string& message,
const std::string& strerror ,
int zip_error_code,
int system_error_code)
{
// Handle error here
fprintf (stderr, message. c_str (), strerror . c_str ());
});
zf. open (ZipArchive::Write);
zf. addEntry ( " folder/subdir/ " );
const char * textData = " Hello,World! " ;
zf. addData ( " helloworld.txt " , textData, 12 );
zf. close ();
return 0 ;
}あなたはすでにあなたのシステムの他の場所にlibzipをまとめているかもしれません。したがって、「libzip make」を実行する必要はありません。代わりに、libzipppをコンパイルするときにlibzipの場所を置くだけです。
make LIBZIP=path/to/libzip Debianの下では、Zlibを手動でインストールしたくない場合にコンパイルするために、パッケージzlib1g-devをインストールする必要があります。
デフォルトでは、MS Visual Studio 2012は次のパスにインストールされています。
C:Program Files (x86)Microsoft Visual Studio 11.0
以外のみのクラスがlibzipppのDLL内で共有されていることに注意してください。したがって、Libzipppに同じコンパイラを使用し、それを使用するコードを使用する必要があります。この問題を回避するには、図書館を静的にリンクする必要があります。
詳細については、こちらです。
ここでは、余分な説明があります。
このプロジェクトは、私の暇なときに完全に開発されました。
私は暗号通貨、特にカルダノ(ADA)の大ファンなので、以下のアドレスでいくつかのコインを送ることができます(こちらを確認してください):
addr1q9sgms4vc038nq7hu4499yeszy0rsq3hjeu2k9wraksle8arg0n953hlsrtdzpfnxxw996l4t6qu5xsx8cmmakjcqhksaqpj66