这是我到目前为止所尝试过的但没有成功:
std::string ReadPartial( std::ifstream& _file, int _size )
{
std::istreambuf_iterator<char> first( _file );
std::istreambuf_iterator<char> last( _file );
std::advance( last, _size );
return std::string( first, last );
}
我知道如何阅读整个文件。
std::string Read( std::ifstream& _file )
{
std::istreambuf_iterator<char> first( _file );
std::istreambuf_iterator<char> last();
return std::string( first, last );
}
但这不是我想做的。我得到一个空字符串。如果我在调试器中查看第一个和最后一个,即使在 std::advance 之后,它们也指向同一件事。
您想使用迭代器有什么特殊原因吗?你可以一次性读取字节:
std::string s(_size, '\0');
_file.read(&s[0], _size);
如果你真的想使用迭代器阅读,你可以这样做:
std::string ReadPartial( std::ifstream& _file, int _size )
{
std::istreambuf_iterator<char> first( _file );
std::istreambuf_iterator<char> last;
std::string s;
s.reserve(_size);
while (_size-- && first != last) s += *first++;
return s;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)