게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
선배님들 도와주세요.. C++ 파일 입출력 관련 에러입니다.
게시물ID : programmer_2765짧은주소 복사하기
작성자 : 달나라금토끼
추천 : 1
조회수 : 759회
댓글수 : 14개
등록시간 : 2014/04/20 06:13:04
허접한 질문을 올려서 죄송합니다.

# 개발 환경
운영체제 : 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() 함수 호출 후에도 스트림 상태 체크
    ==> 문제 없음.... 


... 이 문제만 해결하면 과제 제출인데, 이틀동안 이 에러 하나 때문에 쩔쩔 매고 있습니다.
아무리 생각하고 디버깅을 해봐도 모르겠습니다.

많은 시간 할애해주시지 않아도 됩니다.
잠깐 생각해보시고 머릿속에 스쳐가는 에러 원인이 있으시다면 말씀해주시면 됩니다.

읽어주셔서 감사합니다.

꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호