이 간단한 코드를 사용하여 기록중인 대용량 로그 파일의 청크를 가져와야합니다. 어떤 시점에서 현재 반환 된 위치를 저장합니다. streampos start = istream :: tellg(); 방법. 나중에 코드에서 시작부터 끝까지 버퍼에서 스트림을 읽어야합니다. 코드는 다음과 약 : 내가 관찰하고있어fstream tellg을 사용하여 스트림의 일부분을 끝까지 읽을 수 있습니다.
streampos start = my_stream.tellg();
... // do some stuff with logging
streampos end = my_stream.tellg();
const streamsize size_to_read = (end - start);
char *buf = new char[size_to_read];
lock (m_logReadLock);
{
my_stream.flush();
my_stream.seekg(start);
my_stream.read(buf, size_to_read);
size_read = my_stream->gcount();
}
unlock (m_logReadLock);
효과는 size_read이 size_to_read보다작고 스트림이 EOF 플래그가 설정되어 있다는 것입니다. 끝 포인터가 스트림이 끝나는 곳을 정확히 지정하면 안되며 read() 메서드는 정확한 양의 데이터를 반환해야합니까? 괜찮 았어, 나는 eof 플래그를 검사하여 그것을 돌아볼 수있다. 그러나이 효과에 대한 설명은 누구나 제공 할 수 있습니까?
감사합니다.
read()는 크기를 읽는 것을 보증하지 않습니다. –
그 점을 이해하십시오. 질문은 read()가 (end - start보다 작게) 읽히고 스트림의 끝에 도달하는 이유입니다. – ilya1725
그것은 간단한 문자 배열입니다. – ilya1725