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