( @Chet Simpson). (, , - , ), . , ( unix- , ios_base::binary Windows).
:
( Windows):
std::string GetSurroundingLine(std::istream& f, std::istream::pos_type start_pos)
{
std::istream::pos_type prev_pos = start_pos;
std::istream::pos_type pos;
char buffer[40];
std::istream::pos_type size = sizeof(buffer);
while (true)
{
if (prev_pos < size)
pos = 0;
else
pos = prev_pos - size;
f.seekg(pos);
f.read(buffer, prev_pos - pos);
if (!f)
throw;
int eol_pos;
for (eol_pos = sizeof(buffer) - 1; eol_pos >= 0; --eol_pos)
if (buffer[eol_pos] == '\n')
break;
if (eol_pos >= 0 || pos == (std::istream::pos_type)0)
{
pos += eol_pos + 1;
break;
}
}
f.seekg(pos);
std::string s;
std::getline(f, s, '\n');
return s;
}
: Windows, \r\n, , \r ( , ), .