문제

에 대 2005,나는 코드는 다음과 같습니다.

ifs.open("foo");
while (!ifs.eof())
{
    ifs.read(&bar,sizeof(bar));
    loc = ifs.tellg();
    loc += bar.dwHeaderSize;
    // four byte boundary padding
    if ((loc % 4) != 0)
        loc += 4 - (loc % 4);
    ifs.seekg(loc,ios::beg);
}
ifs.close();

코드에서 잘했 대 2005 년,하지만 실패에 대 2008 표현합니다.에서 무엇을 말할 수 있는,대 2008 년에 반환되지 않습 eof()후에 코드를 추구하는 파일의 끝.나는 뭔가?나는 그것을 추가하여 명시적인지 확인하십시오 찾는 위치를 초과한 파일 크기,그러나 내가 원하는 확실 내가 이해하려면 ifstream 습니다.

도움이 되었습니까?

해결책

EOF 가 깃발을 촉발한 후에도 읽는 과거에 파일의 끝입니다.
upto 파일의 끝을 트리거하지 않습니다.

이 때문에 대부분의 코드는 다음과 같습니다:

while(ifs.read(&bar,sizeof(bar)))
{
     // Do Stuff
}

는 경우의 결과 read()까지 EOF 루프가 입력됩니다.
는 경우의 결과 read()가 EOF 반복되지 않습 enetered

  • 참고:read()이 과거 EOF 이 있는 경우 제로 바이트 왼쪽에서 파일입니다.그렇지 않으면 읽을까 파일의 끝.그래서 루프는 항상을 입력했을 경우 목표는 왼쪽에서 파일입니다.

그 이유는 결과의 읽기(반환 값)을 참조하십니다.으면 스트림에서 사용되는 부울 컨텍스트(같은 경우 테스트 expression)으로 변환한 사용할 수 있는 형식과 같은 문맥.이 결과는 변환 테스트 EOF 국기(외에도 몇 가지의 다른 사람)를 반환합니다 quivalent 의 경우 false EOF 사실입니다.

참고:
이 기술은 더 나은 작품 오버로드하는 경우에는 연산자 << 한 바 등으로 이것을 읽어야에서 정확히 무엇을 필요로하는 개체에 대해 없이 과거의 EOF.그것은 다음을 쉽게 귀하의 개체를 정확하게 읽까지 파일의 끝에 가지 않고 끝났습니다.이 일에 대해 걱정과 함께 읽은 무엇이 일어나야 하는 경우 read()원하는 10bytesand 만 있 5 바이트로 파일에서 발생하는 것과 부분적으로 가득한가?

계속하려는 경우 사용하여 당신의 스타일 코드는 다음과 같습니다:

ifs.open("foo");
while (!ifs.eof())
{
    ifs.read(&bar,sizeof(bar));
    if (ifs.eof())
    {    break;
    }
    // Do Stuff
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top