2012-11-04 4 views
0

pgm 파일 형식을 메모리로 읽는 데 문제가 있습니다.알 수없는 이유로 Ifstream이 실패 함

다음 링크의 소스는 http://www.cse.unr.edu/~bebis/CS308/Code/ReadImage.cpp입니다. 다른 디렉토리는 같은 디렉토리에서 찾을 수 있습니다. CS308의 일부 지시 사항; 니가 관심 있으면.

문제는 ifstream ifp가 실패합니다. 그리고 나는이 코드 조각이 아마도 이유라고 생각합니다. 하지만 나와 함께 괜찮아 보인다.

모든 아이디어는 문제는 사용자의 입력 파일의 형식이되지 않는 것입니다

charImage = (unsigned char *) new unsigned char [M*N]; 

ifp.read(reinterpret_cast<char *>(charImage), (M*N)*sizeof(unsigned char)); 

if (ifp.fail()) { 
    cout << "Image " << fname << " has wrong size" << endl; 
    exit(1); 
} 
+0

"ifp가 실패했습니다"라고 말하면 "이미지 * fname * 크기가 잘못되었습니다"라는 메시지가 인쇄됩니다. – CrazyCasta

+0

예; 그것은 . 나는이 코드 조각이 가장 의심 스럽다. 이미지의 모든 매개 변수가 정확하기 때문에; 나는 확인했다. – Tiana987642

+0

당신은 결코'ifp'에 대한 실제 파일을 열지 않습니다. –

답변

1

을 이해할 수있을 것이다. 그것은 charImage를 채우기에 충분한 데이터를 가져야하지만 그렇지 않습니다. 이것이 실패하는 이유입니다. 또 다른 가능성은 Windows에서이 코드를 실행하려고 시도하고 이진 모드로 파일을 열어야한다는 것입니다.

(구체적 진 부분)에서 :

ifp.open(fname, ios::in); 

행 : 제쳐두고

ifp.open(fname, ios::in | ios::binary); 

, 새로운 오퍼레이터의 결과를 전송할 일반적으로 부적절하다. 여기에서, 그것은 단지 중복이고 아무 의미가 없습니다.

+0

음; 나는 파일 형식에 문제가 없다고 생각한다. irfanview로 열면 아무 것도 잘못되지 않는 것 같습니다. 나는 또한 약간 심상을 시도했다; 뿐만 아니라 하나. AFAIK; 회색 값 (0-255)에 unsigned char이 필요하므로 캐스트가 사용됩니다. 하지만 ifstream :: read char가 작동해야합니다. – Tiana987642

+0

요점을 놓치고 있습니다. 'unsigned char'를 사용할 때 이미'unsigned char * '입니다. 'unsigned char * '로 변환하는 것은 불필요합니다. 또한, 내 제안의 두 번째 부분을 시도 했습니까? 즉, 이진 모드로 열어야한다는 것입니까? – CrazyCasta

+0

아. 알 겠어. 지금 시도해 보겠습니다. 감사합니다 :) – Tiana987642

1

reinterpret_cast<...>()을 사용하면 뭐든지 저에게 의심 스럽습니다. 그것은 아마도 문제의 근원이 아닙니다. 내 생각에 문제의 근원은 Windows 컴퓨터에서 코드를 실행하고 바이너리 모드로 파일을 열지 않는 것입니다. 사용해보기

std::ifstream in("filename", std::ios_base:::binary); 

파일을 여는 코드는 질문의 일부가 아니므로 그냥 추측 해보십시오.

+0

나는 당신의 제안을 시도합니다. 감사 :) – Tiana987642

관련 문제