C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[36856] 파일 입출력시 오류 문제...
임호민 [hominlim] 1082 읽음    2004-08-19 11:26
파일로 저장하는 프로그램 작성중 데이타가 가끔 오류를 치는 부분이 있어 다음과 같이 테스트 해 봤습니다.
0x00 부터 0xff 값을 파일로 저장하는 프로그램인데요...
stdio.h는 인클루드 된 상태고, 코드는 다음과 같습니다.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        unsigned char temp[16];
        for(int i=0;i<16;i++)
                temp[i] = i;

         if(SaveDialog1->Execute()){
              FILE *stream;
              stream = fopen(SaveDialog1->FileName.c_str(), "w+");
              fseek(stream, 0, SEEK_SET);
              for(int j = 0; j < 16; j++){
                      fseek(stream,j,SEEK_SET);
                      fprintf(stream,"%c",(unsigned char)temp[j]);
              }
              fclose(stream);
       }
       for(int k=0;k<16;k++)
                Memo1->Lines->Text = Memo1->Lines->Text + ' ' +temp[k];

}

========================================
Memo1의 결과는 다음과 같이 제대로 나옵니다.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

그런데, 생성한 파일에서는 헥사 에디터로 보면 두번의 엉뚱한 데이타가 들어갑니다.
00 01 02 03 04 05 06 07 08 09 0D 0A 0B 0C 0D 0A 0E 0F

2byte가 더 생기네요... 0A가 들어와야 할 자리에 0D가 들어오고...

어디가 오류일까요?


=============================================
약간 수정을 해 보았습니다. fwrite를 사용해 봤는데요... 결과는 1바이트가 더 생갑니다. 윈도함수인 FileWrite등을 사용해도 마찬가지 입니다.
결과는...
00 01 02 03 04 05 06 07 08 09 0D 0A 0B 0C 0D 0A 0E 0F    이고요...
아래는 소스코드 입니다..

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        unsigned char temp[16];
        for(int i=0;i<16;i++)
                temp[i] = i;

         if(SaveDialog1->Execute()){
              FILE *stream;
              stream = fopen(SaveDialog1->FileName.c_str(), "w+");
              fwrite(&temp, sizeof(temp), 1, stream);
              fclose(stream);
       }
       for(int k=0;k<16;k++)
                Memo1->Lines->Text = Memo1->Lines->Text + ' ' +temp[k];

}

+ -

관련 글 리스트
36856 파일 입출력시 오류 문제... 임호민 1082 2004/08/19
36858     Re:파일 입출력시 바이너리 모드와 텍스트 모드의 차이에 기인한 문제 임문환.실업자 1750 2004/08/19
36863         Re:Re: 감사합니다~ 임호민 908 2004/08/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.