该问题可能已经有了重复的解决方案,请参考上面提供的链接。可能是重复问题:
如何使用 istream 处理字符串
std::ifstream ifile(absolute_file_path.c_str(),std::ios::binary | std::ios::in | std::ios::ate);
if (ifile.is_open()==false)
{
throw std::runtime_error("Unable open the file.");
}
std::stirng file_content;
//here I need good way to read full file to file_content
//note: the file is binary
ifile.close();
这是我知道的方法:
1. 可能不安全。
file_content.resize(ifile.tellg());
ifile.seekg(0,std::ios::beg);
if(!ifile.read(const_cast<char *>(file_content.data()), file_content.size()));
{
throw std::runtime_errro("failed to read file:");
}
ifile.close();
2.Slow
file_content.reserve(ifile.tellg());
ifile.seekg(0,std::ios::beg);
while(ifile)
{
file_content += (char)(ifile.get());
}
while (ifile)
而不是while (!ifile.eof())
(后者可能会变成无限循环)。 - Christian Ammer!stream.eof()
循环是错误的。 (http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.5) - Lightness Races in Orbit