Windows (Win7 64 비트, VS2012 64 비트 프로젝트)에 이진 파일을 쓰고 있습니다. 그러나 리눅스에서 C++ 프로젝트 (쿠분투 64 비트, GCC 4.7 64 비트 proj)에서 읽으려고한다면. ifstream이 열리지 않습니다. 사실, fopen으로 시도해도 파일을 열 수 없습니다.Linux : Windows에서 작성된 이진 파일을 읽을 수 없습니다.
전체 777 권한을 열어 텍스트 편집기에서 파일을 열려고했는데 모두 괜찮습니다. 파일을 열려면 다음 코드를 사용하여
:
bool success = false;
//trying weith fopen:
FILE *f = NULL;
f = fopen("xxx.bin","rb");
if(f != NULL){
success = true;
}
printf("Stat:%d\n",success);
//trying with ifstream
std::ifstream stream;
stream.open("xxx.bin", std::ios::binary);
success = stream.is_open();
if(!success){
throw;
}
printf("Stat:%d\n",success);
모두 실패합니다.
무엇이 문제 일 수 있습니다. 그리고 크로스 플랫폼 이진 파일을 인코딩 할 때주의해야 할 점이 있습니다. 두 운영 체제 모두 리틀 엔디안을 사용하므로 endianess는 문제가되지 않는다고 가정합니다.
대소 문자를 구분하고 있습니까? – sjdowling
바이너리 파일은 바이트 단위의 블로입니다. Windows 나 Linux는 바이트를 전혀 이해하지 않는 한 관련이 없습니다. 열 수 없다면, 뭔가 잘못되었습니다. 파일은 예상 한 위치에 있지 않을 수 있습니다. – nvoigt
오류 메시지를 인쇄하십시오. – Ben