The Modern C++ Challenge 第10章

The Modern C++ Challenge 第9章 の続きです。

今回は第10章に挑戦します。

まずは目次を読む。

第10章 アーカイブ、画像、およびデータベース

79 ZIP アーカイブ内のファイルの検索
80 ZIP アーカイブへの/からのファイルの圧縮および解凍
81 パスワード付きのZIPアーカイブへの/からのファイルの圧縮および解凍
82 国旗を表す PNG の作成
83 検証テキスト PNG 画像の作成
84 EAN-13 バーコードジェネレーター
85 SQLite データベースからの映画情報の読み込み
86 トランザクショナルに SQLite データベースに映画情報を挿入する
87 SQLite データベースでの映画情報の画像の処理

問題文を読む。

問79 ZIP アーカイブ内のファイルの検索

ユーザーが指定した正規表現に名前が一致する ZIP アーカイブ内のすべてのファイルを検索して出力できるプログラムを作成します。
たとえば、^.*.jpg$ を使用して、拡張子が .jpg のすべてのファイルを検索します。

ソースコードを斜め読みして実行する。
この章は外部ライブラリを使っていて、 すんなり実行できなかった。

問79 問80 問81 にて ZipLib ライブラリを使っている。
ビルドして共有ライブラリ(libZipLib.a) を作成する。

github: ziplib

問73 問82 問83 82 問84 にて pngwriter ライブラリを使っている。
pngwriter.c pngwriter.h をコピーしてビルドする。

github: pngwriter

一通り実行できたので、
Modern C++ に着目して、ソースコードを読んでみる。

問79 問80 にて std::filesystem を使っている。

.cpprefjp: std::filesystem

問82 国旗を表す PNG の作成
ルーマニアの国旗を作成する

このプログラムでは、 左から赤黄青の3色旗が生成される
正しくは青黄赤のはず。

wikipedia: ルーマニア

第10章 のソースコードGithub に公開した。
https://github.com/ohwada/The-Modern-Cpp-Challenge/tree/main/The-Modern-Cpp-Challenge/Chapter10