제가 하고자 하는 작업은 임의의 화일을 생성 하는 겁니다..
//화일의 헤더
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]....