Q&A

  • TFileStream에 관한 질문입니다..답변좀
제가 하고자 하는 작업은 임의의 화일을 생성 하는 겁니다..



//화일의 헤더

Header = Record

MapName : array [0..19] of char;

MapMakerName : array [0..19] of char;

X : byte; //배열의 크기

Y : byte; //배열의 크기

end;



var

FileHader : Header;

SaveFileStream : TFileStream;

Buf : Array of array of Byte; //데이타가 될부분



와 같이 헤더를 선언 하였고..

특정 버튼을 클릭 할때... 동작되는게..



procedure TForm1.Button2Click(Sender: TObject);

var Tmp : Boolean;

i, j : integer;

TmpStr : String;

begin

fillchar(FileHader.MapName, 20, ord(' '));

fillchar(FileHader.MapMakerName, 20, ord(' '));



TmpStr := Edit3.text;

strcopy(FileHader.MapName, PChar(copy(TmpStr + ' ',

1, 0)));

TmpStr := Edit4.text;

strcopy(FileHader.MapMakerName, PChar(copy(TmpStr + ' ',

1, 0)));



FileHader.X := strtoint(Edit1.Text);

FileHader.Y := strtoint(Edit2.Text);



setLength(Buf, FileHader.Y);

for i := 0 to FileHader.Y - 1 do

begin

setLength(Buf[i], FileHader.X);

end;



try

if SaveDialog.Execute then begin

if SaveDialog.FileName = '' then exit;



SaveFileStream := TfileStream.Create(SaveDialog.FileName, fmCreate or

fmOpenWrite);

SaveFileStream.Write(FileHader, Sizeof(FileHader));



for j := 0 to FileHader.Y - 1 do

begin

for i := 0 to FileHader.X - 1 do

begin

if F1Book1.TextRc[j+1, i+1] <> '' then

begin

Buf[j, i] := StrToInt(F1Book1.TextRc[j+1, i+1]);

end

else Buf[j, i] := 0;

end;

SaveFileStream.Write(Buf[j], Sizeof(Buf[j])); <=이부분

end;



end;

SaveFileStream.Destroy;

except

SaveFileStream.Free;

end;

end;



입니다..



근데...문제는 정적 배열로 선언된..값을 SaveFileStream.Write()를

이용할때..정확한 값이 들어 가지만 동적으로 선언된 배열은 어뚱한 값이 들어 갑니다.



왜...정확한 값이 들어가지 않는지..아시는 분은 답변좀 해주세여..ㅜ.ㅜ



화일 형식에 대한 말씀을 드리자면

데이타는 2차원 배열 입니다.. 5 * 10 의 배열이라고 가정할때..



1111111111

1000000001

1000000001

1000000001

1111111111



화일 형식==> 헤더를 기록하고 그다음 데이타 Buf[0] + Buf[1] + Buf[2] + Buf[3]....

0  COMMENTS