std::string
ファイルを に読み込む、つまりファイル全体を一度に読み込むにはどうすればよいですか?
テキスト モードまたはバイナリ モードは、呼び出し元が指定する必要があります。ソリューションは、標準に準拠し、移植可能で効率的でなければなりません。文字列のデータを不必要にコピーしてはならず、文字列の読み取り中にメモリの再割り当てを回避する必要があります。
これを行う 1 つの方法は、ファイルサイズを統計し、サイズを変更しstd::string
てfread()
、std::string
のconst_cast<char*>()
'edにすることdata()
です。これには、std::string
のデータが連続している必要がありますが、これは標準では要求されていませんが、既知のすべての実装に当てはまるようです。さらに悪いことに、ファイルをテキスト モードで読み取ると、std::string
のサイズがファイルのサイズと等しくない場合があります。
を に、そこから に を使用して、完全に正しく、標準に準拠し、移植可能なソリューションを構築できstd::ifstream
ます。ただし、これにより、文字列データがコピーされたり、不必要にメモリが再割り当てされたりする可能性があります。rdbuf()
std::ostringstream
std::string
- 関連するすべての標準ライブラリの実装は、不要なオーバーヘッドをすべて回避するのに十分スマートですか?
- それを行う別の方法はありますか?
- 必要な機能を既に提供している隠れたブースト機能を見逃していませんか?
void slurp(std::string& data, bool is_binary)