삽질 – 001 :: 파일오픈은 정상인데 이상하게 파일이 않읽어질때

오늘은 삽질

간단한 파일입력코드를 만드는중에 파일 사이즈를 알아야 할일이 있었다. 그래서 간단하게 오프셋을 ifstream::beg(파일의 처음)의 값과 ifstream::end(파일의 마지막) 값의 차이로 크기를 구하고 나서 파일전체를 메모리에 올리는 코드를 짰다.

근데 실제로 돌려보니 파일의 내용을 전혀 읽지 못하는것이다. 디버거로 값을 확인해 보니 read 함수를 호출하는것 까지도 전혀 문제가 없는데 파일의 내용자체는 전혀 가져오지 못하는것… 코드는

[CODE]file.seekg(0, ifstream::beg );
ifstream::pos_type startPos = file.tellg();
file.seekg(0, ifstream::end );
ifstream::pos_type lastPos = file.tellg();
m_nFilesize = (int)(lastPos-startPos);[/CODE]

문제가 된 코드는 요렇게 생겼었는데…
한시간 동안(….T_T) 살펴본 결과 file.seekg(0, ifstream::end ); 요 코드에서 파일 오프셋을 마지막으로 옮겨버려서 정작 read를 호출했을 때는 읽을 데이타가 없었던것…
코드를

[CODE]file.seekg(0, ifstream::end );
ifstream::pos_type lastPos = file.tellg();
file.seekg(0, ifstream::beg );
ifstream::pos_type startPos = file.tellg();
m_nFilesize = (int)(lastPos-startPos);[/CODE]

으로 수정해서 다시 파일의 처음으로 오프셋이 오게 해주니 해결….

후….삽질도 데이타베이스화 할 필요성을 느낀다.

ps.
사실 “파일오픈은 정상인데 이상하게 파일이 않읽어질때” 의 진정한 삽질의 상황이라면
“알고보니 파일에 내용이 하나도 없을때” 가 아닐까…

소스세이프

VSS에 들어갔던 파일들은 참조파일이나 데이타파일이라도 Read-Only로 파일속성이 바뀌어 버린다.

프로그램에서 실행할때 필요하면서 변경된 사항을 저장하는 류의 파일이라면 릴리즈 할때 꼭 속성을 변경해야 한다.

이 경우 GetLastError() 는 5 ( 액세스가 거부되었습니다. ) 를 리턴한다.