2010-03-12 5 views
1
while(getline(fileIn,line)) 
{ 

    fileOut <<line<<endl; 

} 


while(getline(fileIn,line)) 
{ 

    if(fileIn.eof()) 
    break; 
    fileOut <<line<<endl; 

} 

나는이 두 코드를 모두 시험해 보았고 두 번째 코드는 과거의 파일 끝을 읽고 깨뜨리지 않았습니다. 아무도 그 이유를 말할 수 있습니까?getline을 사용할 때 end-of-file을 감지하는 방법은 무엇입니까?

저는 파일에서 읽고 행을 쓰고 있습니다.

+2

더 많은 코드를 게시하십시오. –

답변

0

"fileIn"과 "eof()"사이의 쉼표입니까? ??? (두 번째 예)

내가 좋아하는 한 가지는 내 fstream에서 exceptions을 사용하도록 설정하는 것입니다. YMMV :

ifstream file; 
file.exceptions(ifstream::eofbit | ifstream::failbit | ifstream::badbit); 
+1

eofbit는 거의 사용자가 원하는 것을 수행하지 않으며 예외를 허용하는 것은 일반적으로 매우 나쁜 생각입니다. Failbit에서 완전한 오류 처리를 가능하게하는 것만으로도 충분하지만, 프로그램이 끝까지 읽는다면 예외적이지 않은 (그러나 대신 예외적 인) 상황에서 예외가 던져지기 때문에이 방법을 권장하지 않습니다. – Tronic

+0

오타였습니다. 그러나 문제는 여전히 남아 있습니다. – djones2010

+0

@ 트로닉 좋은 점 – pestilence669

0

첫 번째 코드가 정확하고 확실하게 데이터가 파일에 남아되지 않으면 루프를 종료한다.

3

getline 함수는 읽고있는 스트림에 대한 참조를 반환합니다. (이전 EOF)을 읽으려고하면 false로 평가됩니다. 스트림은 파일의 마지막 줄을 읽을 때도 여전히 양호한 상태입니다. 따라서 두 번째 코드 블록에서는 if 테스트에 도달하지 못합니다.

관련 문제