0

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

関連するメモとして、C を使用するべきだったのFILE*か、それともヒューズ ファイルシステムの場合は単純なファイル記述子を使用するべきだったのか疑問に思います。strerror(errno)iostreams が私に与えているものよりもはるかに優れているからです。

4

2 に答える 2

1

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

必要に応じて、ここからソース コードを取得できます (Apache ライセンス)。

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

関連するファイルは次のとおりです。

cgatools/util/Streams.[ch]pp

于 2011-05-19T23:59:45.517 に答える
0

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

ただし、 をboost::filesystem::ifstream使用しているため、 を使用しているため、それを使用していると想定していますboost::filesystem::path。のブーストの実装では、コンストラクターと の 2 つの関数ifstreamを継承してオーバーライドします。したがって、より良いエラー報告が必要な場合は、単純に同じことを行い、boost の実装から継承し、これら 2 つの関数をオーバーライドして、必要なチェックを提供することができます。追加の肥大化: おそらくそれほど多くはなく、希望する動作がストリーム自体に組み込まれます。std::basic_ifstreamopen

于 2011-07-10T04:48:02.427 に答える