檔案流不能讀到動態數組?. VCL組件開發及應用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226161917101.html
為什麼檔案流不能讀到動態數組? 代碼以下
procedure tform1.ComeBackData();
var filespath:string;
tFile:TFileStream;
tsize,i:longint;
tempArr:array of byte;
begin
if openDialog1.Execute then
filespath:=openDialog1.FileName ; //取得開啟的檔案名稱
if filespath='' then
exit;
tFile:=TFileStream.Create(filespath,fmOpenRead); // 建立二進位檔案
tsize:=tfile.Size; //取得總的長度
SetLength(tempArr,tsize); //計算動態數組的長度
//分配動態數組的空間
GetMem(temparr, tsize * SizeOf(byte));
tfile.Read(temparr,tsize);
FreeMem(temparr, tsize*SizeOf(byte));
end;
以上代碼檔案流不能讀到動態數組,但可以讀到靜態數組裡,請問為什麼?
procedure tform1.ComeBackData();
var filespath:string;
tFile:TFileStream;
tsize,i:longint;
tempArr:array of byte;
begin
if openDialog1.Execute then
filespath:=openDialog1.FileName ; //取得開啟的檔案名稱
if filespath='' then
exit;
tFile:=TFileStream.Create(filespath,fmOpenRead); // 建立二進位檔案
tsize:=tfile.Size; //取得總的長度
SetLength(tempArr,tsize); //設定(而不是計算)動態數組的長度
tfile.Read(tempArr[0],tsize);
end;
//分配動態數組的空間
GetMem(temparr, tsize * SizeOf(byte));
這個不需要的
procedure tform1.ComeBackData();
var filespath:string;
tFile:TFileStream;
tsize,i:longint;
tempArr:array of byte;
begin
if openDialog1.Execute then
filespath:=openDialog1.FileName ; //取得開啟的檔案名稱
if filespath='' then
exit;
tFile:=TFileStream.Create(filespath,fmOpenRead); // 建立二進位檔案
tsize:=tfile.Size; //取得總的長度
SetLength(tempArr,tsize); //計算動態數組的長度
//分配動態數組的空間
//GetMem(temparr, tsize * SizeOf(byte));
tFile.Position:=0;
tfile.Read(temparr[0],tsize);
// FreeMem(temparr, tsize*SizeOf(byte));
end;