Mantendo uma posição válida usando o Seekg em ifstreams
Pergunta
Estou tentando tornar meu arquivo analisar mais robusto. Usando um ifstream, como posso garantir seekg
me mantém em uma posição válida dentro do arquivo?
Isso não funciona:
while(m_File.good() && m_File.peek() != EOF)
{ ...a seekg operation moves file position past end of file... }
Presumo que o iterador atual tenha sido empurrado além do iterador final, para que o Peek () nunca seja verdadeiro.
Solução
Não, não há como fazer isso, além de encontrar o deslocamento do final do arquivo e garantir que você não procure além dele, o que causa comportamento indefinido - é claro que você pode aumentar o tamanho do arquivo escrevendo.
Outras dicas
Se for um erro quando você atingir uma posição ruim (por exemplo, não deve acontecer), você pode tentar definir o Máscara de exceção do fluxo, e pegue a exceção apropriada fora do while loop. Nesse caso, seria a solução "mais limpa".