Componentsの略)というオープンソースのC++用クラスライブラリを紹介します。今回も、6つのライブラリのうちのPOCO::Foundationライブラリから、いくつかクラスをピックアップして解説しましょう。今回のテーマは、最も基本的とも言えるファイル処理です。Componentsの略)というオープンソースのC++用クラスライブラリを紹介します。今回も、6つのライブラリのうちのPOCO::Foundationライブラリから、いくつかクラスをピックアップして解説しましょう。今回のテーマは、最も基本的とも言えるファイル処理です。-テキスト処理もPOCOにおまかせ対象読者オブジェクト指向を理解し、ネイティブC++のクラスライブラリを活用できる方を対象としています。X、Linux、HP-UX、Tru64、Solaris、QNXでの動作を保証しています。コンパイラは、いわゆる標準C++のコードに対応したものが必要です。POCO内部でSTLを使用しています。Edition」という環境で動作検証を行いました。EditionでもプラットフォームSDKの別途インストールは不要になっています。APIを利用する場合はインストールが楽になりました。1ファイル処理は、POCO::Foundationライブラリ内の「Filesystem」という名のパッケージにまとめられており、以下の5つのクラスが実装されています。ファイル処理はプラットフォーム(Windows、UNIXなど)に依存するものが多いのですが、記事では基本的にWindows環境のみを想定して解説します。ワイルドカード検索プラットフォームが違えば、ファイルシステムも異なります。POCOでは、複数の環境に対応するため、インターフェースと実装とが分離しており、内部の実装部分でプラットフォームごとに分かれています。そのため、利用する側では特にプラットフォームの違いを意識する必要はありません。中にはプラットフォームに依存した振る舞いをする関数もあります。属性を付与することができます。それに対応してsetExecutableという実行許可を付加するメンバ関数がPoco::Fileクラスにあります。Windowsではファイルにそのような属性はありませんので、関数の定義はありますが処理は何も実装されていません。各クラスをリファレンス的に詳しく解説していっても退屈ですので、それはPOCOのドキュメントに譲ることにし、ここではクラスの特徴的なポイントをサンプルコードと合わせて解説することにしましょう。File基本的なファイル操作クラスです。MFCでのCFileクラスのようなファイルをオープンして読み書きするクラスとは少し趣が異なっています。メンバ関数として用意されているのは、ファイルのコピーやリネーム、空のファイル作成など、ファイルを外部的に操作するものばかりです。その上、通常のファイルだけでなく、ディレクトリから生成することもできます。ディレクトリかどうかを返すメンバ関数isDirectory、ディレクトリを作成するメンバ関数createDirectoriesなどが用意されています。それでは、ファイルを読み書きする処理は、POCOのクラスでは実装されていないのでしょうか?実はファイルの読み書きに関しては、POCOではストリームとして処理するようになっているのです。ストリームを操作するクラスは、けっこう豊富に用意されているので、それはまた後ほど解説することにしましょう。Poco::Fileクラスのサンプルコードを以下に示します。0;}コメントを追っていけば分かると思いますが、いくつか補足をしておきます。Poco::File.removePoco::File.removeでは、クラス自身が保持しているファイルを削除します。引数はリカーシブ(再帰)オプションで、デフォルトではfalseになっています。クラスがディレクトリを示していて、引数がtrueの場合はディレクトリ内のファイルの有無にかかわらずディレクトリごと削除されます。Poco::File.listPoco::File.listは、クラスが保持しているディレクトリ配下のファイルを取得します。サンプルコードではPoco::File型のvectorで取得しています。クラス自身がディレクトリを示していない場合は例外が送出されます。Poco::File型だけでなく、std::vector<std::string>を引数で指定することもできます。その場合はファイル名のみを文字列として取得することになります。Poco::File型だけでもいいように思えますが、実はPoco::Fileにはファイル名を参照するメンバ関数がないのです。サンプルコードのpathのようにフルパス名を返すメンバ関数しかありません。ファイル名だけを取り出したいときは、次のPoco::Pathクラスを使うことになります。いずれの場合も取得したファイルにはサブディレクトリが含まれます。APIのFindFirstFile、FindNextFileとは異なり、自分「.」や親ディレクトリ「..」は含まれません。