허접한 질문을 올려서 죄송합니다.
# 개발 환경 운영체제 : Windows 7 Ultimate K ( 64bit )
IDE : Visual Studio 2010 Professional ( 서비스팩 설치 했습니다. )
빌드는 기본 설정되어있는 Win32, Debug 모드로 빌드했습니다.
# 에러 발생 요약
파일처리 수업의 과제를 하는 와중에 에러가 하나 발생했습니다.
에러가 왜 발생하나 살펴보니.
파일의 시작으로부터 130번째 위치에 레코드를 기록하도록 코드를 작성했습니다.
제 코드에서 문제가 생기는 부분을 간추려서 보여드리면, ( 지금 문제에서 관련 없다고 생각하는 부분은 생략하겠습니다. 파일 열고 닫고 하는 것들요 )
( 이 코드가 수행되기 전에 이미 파일의 크기는 1560 바이트입니다. )
fstream fout; // 파일 열기 모드 : ios::in | ios::out | ios::binary
fout.seekp( 130, ios::beg );
fout.write( 블라 블라 );
위와 같은 코드를 작성하여 130번째 위치에 레코드를 기록하라 하였는데.
헥사 에디터로 파일을 열어보니 130번째가 아닌 260번째에 기록됩니다. ( 레코드 하나의 크기가 130바이트입니다. )
# 추측해봤던 에러 원인
>> fstream 클래스를 기반으로 짠 클래스에서 무언가 잘못했나 싶어 처음부터 새로 작성
==> 그래도 같은 에러 발생
>> seekp() 함수가 실패하는가 싶어서 seekp() 부터 3단계 더 들어가봄
==> 실제 파일 포인터의 위치는 모르겠으나 적어도 seekp에서부터 3단계 안까지는 seekp() 함수 성공
>> 그래도 혹시나 싶어서 seekp( 130, ios::beg ) 이후 write()를 호출하기 전에 tellp()를 통해 파일 포인터의 위치 확인
==> tellp()로 확인한 파일 포인터 위치 130.
>> 혹시나 싶어서 seekp() 호출 후 good() 함수를 이용해 스트림 상태 체크
==> 문제 없음
>> write() 함수 호출 후에도 스트림 상태 체크
==> 문제 없음....
... 이 문제만 해결하면 과제 제출인데, 이틀동안 이 에러 하나 때문에 쩔쩔 매고 있습니다.
아무리 생각하고 디버깅을 해봐도 모르겠습니다.
많은 시간 할애해주시지 않아도 됩니다.
잠깐 생각해보시고 머릿속에 스쳐가는 에러 원인이 있으시다면 말씀해주시면 됩니다.
읽어주셔서 감사합니다.