2010-01-31 5 views
1

다음과 같은 이유가 발생하는 이유는 무엇입니까?fstream >> int가 실패 했습니까?

std::fstream i(L"C:/testlog.txt", std::ios::binary | std::ios::in); 
int test = 0; 
i >> test;

fail()이 true를 반환합니다. 파일이 존재하고 열립니다.

i._Filebuffer._Myfile._ptr 을 확인했으며 파일 버퍼에 대한 포인터이므로 실패 이유를 알 수 없습니다.

+0

파일의 내용을 표시하십시오. –

+0

코드는 어디에서 실패합니까? – AndiDog

+0

Windows에서 프로그램을 많이 작성하지는 않지만 파일 이름에 슬래시가 틀리지 않습니까? "C : \ testlog.txt"가 더 잘 작동할까요? – Dan

답변

2

파일을 이진 모드로 여는 중입니다. 추출 연산자는 텍스트 파일과 함께 사용해야합니다. 텍스트 모드에서 파일을 열려면 std::ios::binary 플래그를 두지 마십시오.

실제로 이진 파일을 가지고있는 경우 read() 함수를 대신 사용하십시오.

편집 : 역시 테스트를 거쳤으며 실제로 작동하는 것으로 보입니다. 우리가하지 않기 때문에의 getline은 효율적이지처럼 추출 및 삽입 사업자 (< < 및 >>) 및 기능의 입력 및 출력 데이터로, 바이너리 파일에서

: 나는 말한다 CPlusPlus.com에서이있어 모든 데이터의 형식을 지정해야하며 데이터는 텍스트 파일이 공간, 줄 바꿈 등의 요소를 구분하는 데 사용하는 분리 코드를 사용할 수 없습니다.

단순히 "텍스트가 아닌 바이너리로 스트림 고려"라고 표시된 ios::binary의 설명과 함께, 지금 완전히 혼란스러워합니다. 이 답변

+0

GCC와 완벽하게 작동합니다. – AndiDog

+0

바이너리 모드로 파일을 열면 아무 효과가 없어야합니다. '\ n'과 같은 문자를 제어하는 ​​것뿐입니다. 이제 막 테스트했습니다. –

+0

@ 토마스 그들은 "효과가 없다"고 말합니다 (그것이 의미하는 바는 무엇이든). –

1

다음 ... 자신의 문제로 전환된다

#include <fstream> 
#include <iostream> 
using namespace std 
int main() { 
    std::fstream i("int.dat" , std::ios::binary | std::ios::in); 
    int test = 0; 
    if (i >> test ) { 
     cout << "ok" << endl; 
    } 
} 

인쇄를 "확인"문자 "123"을 포함하는 파일을 제공합니다. 코드가 잘못되었음을 보여주는 유사한 간단한 테스트를 게시하십시오.

관련 문제