|
파일로 저장하는 프로그램 작성중 데이타가 가끔 오류를 치는 부분이 있어 다음과 같이 테스트 해 봤습니다.
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];
}
|