9

C++、Boost、および Qt を使用するプロジェクトに取り組んでいます。たとえば、Qt の qCompress() 関数を使用して、単一のファイルとバイトストリームを圧縮する方法を理解しています。

サブディレクトリを含む複数のファイルのディレクトリを圧縮するにはどうすればよいですか? クロスプラットフォーム (Mac、Win、Linux) ソリューションを探しています。たくさんの新しいプロセスを起動したくありません。

複数のファイルからのバイトストリームを結合して zip アーカイブにする標準的な方法はありますか、それとも Boost iostream ライブラリで利用できる便利な関数またはメソッドがありますか?

ご協力ありがとうございました。

更新: QuaZip ライブラリは非常に優れています。ダウンロード パッケージ (「tests」ディレクトリ内) には、ファイルのディレクトリを圧縮する方法を非常に明確に示す例があります。

更新 2 : Linux ビルド環境でこのタスクを完了した後、QuaZip が Visual Studio コンパイラでまったく機能しないことがわかりました。これらすべてのコンパイラ エラーに対処することは可能かもしれませんが、このパスを見ている人には注意が必要です。

4

7 に答える 7

9

次の 2 つのライブラリが見つかりました。

  • ZipIOS++ . 「純粋な」C++ のようです。サポートされているプラ​​ットフォームとして Windows が明示的にリストされていません。だから、自分の運を試してみるべきだと思います。
  • クアジップ。Qt4に基づいています。実際、いい感じです。Windows を明示的に一覧表示します (mingw を使用)。どうやら、[this] ライブラリの C++ ラッパーです。

ああ、もちろん、ディレクトリの Zipping/Unzipping に関するこのQt メーリングリストの質問からそれらのサイトをリッピングしました :)

于 2009-02-03T04:10:10.560 に答える
2

http://www.zlib.net/

于 2009-02-03T03:53:05.243 に答える
1

記録のために...

今日、私はVisualC++で非常によく似た何かをする必要がありました。(他のプラットフォームでプロジェクトをコンパイルする可能性を維持したかったのですが、この目的のためだけにQtを採用しないことをお勧めします。)

Minizipライブラリを使用することになりました。プレーンCで記述されていますが、その周りに単純なC ++ラッパーを考案するのは簡単で、少なくとも私の目的では、最終結果はうまく機能します。

于 2009-04-08T15:30:16.897 に答える
1

minizip のラッパーを作成して、必要な機能をいくつか追加し、使いやすくしました。最新の c++11 を使用し、Visual Studio 2013 を使用して開発されているため、すぐに使用できるはずです。

ここに完全な説明があります: https://github.com/sebastiandev/zipper

フォルダー全体、ストリーム、ベクターなどを圧縮できます。また、すべてを完全にメモリ内で実行できるという優れた機能もあります。

于 2015-07-26T14:32:01.467 に答える
1

Poco::Zipも選択できます。明確なドキュメントとデモ用のコードがあります。

Poco::Zip ドキュメント

于 2019-12-30T07:33:22.143 に答える
0
system("zip myarchive.zip *");
于 2009-02-03T03:46:42.820 に答える
0

Windows で VisualStudio 2010 を使用して QuaZIP 0.4.3 を試してみました。まだ問題はありますが、簡単に解決できます。

VS でビルドするには:

  1. CMake を使用して、QuaZIP 用の VS ソリューションを構成および生成します。
  2. VS でソリューションを開き、ビルドします。最初に、「zlib.h」が見つからないことに気付くでしょう。
  3. quazip プロジェクトの設定を開き、Zlib の Qt のコピーへのパスを C/C++ -> 一般 -> 追加のインクルード ディレクトリ: $(QTDIR)/src/3rdparty/zlib に追加します。
  4. 再ビルドすると、多数の警告と 1 つのエラー C2491: QuaZipFile::staticMetaObject の dllimport 静的問題が表示されます。
  5. これは、QuaZipFile が「class QUAZIP_EXPORT QuaZipFile」のように宣言されており、QUAZIP_EXPORT は、QUAZIP_BUILD が定義されているかどうかに基づいて、dll の場合は Q_DECL_EXPORT に、アプリケーションの場合は Q_DECL_IMPORT に解決する必要があるためです。QuaZIP を構築するとき、QUAZIP_BUILD を定義する必要がありますが、そうではありません。構成プロセスは、代わりに完全に役に立たない "quazip_EXPORTS" を誤って定義します。
  6. 修正するには、すべてのビルド構成から「quazip_EXPORTS」を削除し、代わりに QUAZIP_BUILD を追加します。QuaZIP は正常にビルドされます。
于 2011-09-29T22:22:36.673 に答える