通常の ifstream と現在使用している boost:iostream の両方で次のコードを試しましたが、どちらも同じ結果になりました。
これは、ファイルを physfs からメモリにロードし、それをハンドラーに渡して処理することを目的としています (画像、オーディオ、データなど)。現在、c_str が呼び出されると、ファイルのごく一部しか返されません。
PhysFS::FileStream file("Resources/test.png" , PhysFS::OM_READ);
if(file.is_open()) {
String* theFile;
theFile = new String((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
String::iterator it;
for ( it=theFile->begin() ; it < theFile->end(); it++ ) {
std::cout << *it;
} // Outputs the entire file
std::cout << theFile->c_str(); // Outputs only the first few lines
}
イテレータ ループは期待どおりに png ファイル全体を出力しますが、c_str 呼び出しは最初の数文字 (\211PNG) のみを返します。
私はかなり長い間、このコードのバリエーションを試してきましたが、成功しませんでした。何か案は?