2011-05-19 7 views
0

特定のアーカイブ形式を抽出(およびヒューズマウント)できる小さなプログラムを実装しました。 boost::filesystem::ifstreamを使用していますが、エラーが発生した場合(たとえば、ユーザーが抽出したいファイルが存在しない場合)、非常にわかりやすいエラーメッセージが表示されます。 IOに関連するC++の問題のエラーメッセージを表示する方法があるのだろうか?iostreamのエラーメッセージの表示を改善する

私はCのFILE*を使用していたはずか、ヒューズファイルシステムの場合は単純なファイル記述子を使用していたはずですか? strerror(errno)はiostreamsが私に与えるものよりも良い方法です。

+1

'std :: ifstream'を意味しますか? AFAIK、 'boost :: filesystem :: ifstream'はありません... – Thanatos

+1

@ Thanatos:Boost.Filesystem v2はしませんでしたが、v3はそうです。関連するドキュメント[here](http://www.boost.org/doc/libs/release/libs/filesystem/v3/doc/reference.html#File-streams)を参照してください。 – ildjarn

答えて

1

boost :: iostreamsを使用し、独自のファイルベースのシンクとソースを実装するよりも優れた方法が見つかりませんでした。

必要であれば、あなたは(Apacheのライセンス)ここでは、ソースコードを入手することができます

http://sourceforge.net/projects/cgatools/files/1.3.0/cgatools-1.3.0.9-source.tar.gz/download

関連するファイルは次のとおりです。/ストリームutilの

cgatools/[CH]頁

+0

これはすばらしいiostreamの実装を含んでいますが、オーバーフローするかどうかはわかりません。また、私は別のプロジェクトからいくつかのクラスを取り出して、それを自分のものに固執したくないでしょう。維持するのは地獄です。優れたエラーメッセージと高性能を備えた素晴らしいC++ IOライブラリ(主要なLinuxディストリビューションでサポートされている)があれば、私は喜んでそれを使用します。しかし、基本的なC IOを使用する方が良いのかどうかはわかりません。私はFUSEをよく知っている人からの回答を待っています(FUSEメーリングリストに質問を投稿しました)。 – panzi

+0

(私の目的のために私はオーバーブロット*を意味しました) – panzi

0

とにかくファイルシステムライブラリを使用しているので、ストリームでアクセスしようとする前にfile existsがテストされているかどうかを確認できます。これはあなたの膨大な懸念を避けるでしょうが、あなたが探しているものと同じ意味では動作しません。つまり、ストリーム自体が存在チェックを実行しません。

ただし、boost::filesystem::ifstreamを使用しているため、boost::filesystem::pathを使用しているため、これを使用していると仮定しています。ブーストの実装では、ifstreamstd::basic_ifstreamから継承し、2つの関数、つまりコンストラクタとopenをオーバーライドします。したがって、より良いエラー報告が必要な場合は、同じことをブーストの実装から継承し、それらの2つの関数をオーバーライドして、必要なチェックを提供することができます。追加の膨らみ:多分そうではなく、ストリーム自体にあなたが望む振る舞いを組み込みます。

関連する問題