私はほとんどの C++ に精通していますが、私が避けてきた領域の 1 つは IO ストリームでした。これは主に、適切でない組み込みシステムで使用してきたためです。しかし、最近はそれらに慣れる必要があり、シンプルであるべきだと思うものを見つけるのに苦労しています.
私が探しているのは、固定数の文字を C++ ストリームから に読み込む比較的効率的な方法ですstd::string
。char
メソッドを使用して一時配列を簡単に読み取り、read()
それを に変換できますstd::string
が、これはかなり見苦しく、無駄なコピーを伴います。次のような方法で、ストリーム全体を文字列に読み取ることもできます。
std::string getFile(std::fstream &inFile)
{
std::stringstream buffer;
buffer << inFile.rdbuf();
return buffer.str();
}
...しかし、メモリへの無制限の読み取りは一般的にはお勧めできません。そのため、一度に 1 ブロックずつ、たとえば 4K 程度でファイルにアクセスしたいと考えています。char
一度に文字を読み取ることもできますが、一時的な配列に読み取るよりも醜く、効率が悪いと感じます。
では、ストリームから次のN文字std::string
を含むストリームから直接取得する簡単な方法はありますか? これを行う方法がまったくないのかもしれませんが、そのようなものが欠けているのは奇妙に思えるので、明らかに何かが欠けているに違いないと感じました。
ところで、私は C ファイル IO API に精通しており、それらに関連するソリューションを探しているわけではありません。read()
とで何かをノックアップすることはできますが、私が扱ってwrite()
いるコードはストリームを多用しているため、コードの追加を一貫したスタイルに保つことをお勧めします。