source:tfilestream;
sa:array of byte;begin
Source:=TFileStream.Create('d:\test.dat',fmOpenRead or fmShareExclusive);
Source.Seek(0,soFromBeginning);
setlength(sa,4);
Source.Read(sa,sizeof(sa));
source.Free;
sa:array of byte;begin
Source:=TFileStream.Create('d:\test.dat',fmOpenRead or fmShareExclusive);
Source.Seek(0,soFromBeginning);
setlength(sa,4);
Source.Read(sa,sizeof(sa));
source.Free;
解决方案 »
- ???请问什么报表自带的能导出Excel、pdf、html、CSV文件、文本文件、图像文件,以前用过,忘了是什么报表了???
- 关于函数的简单问题
- 怎么发邮件时内容有延迟啊?求救!!
- 如何把我的xml文件提交到服务器中(巨难)-----重金求解,有帮助者得分.
- 静儿有delphi问题需要帮助QQ:9813117
- 请问为什么不能执行???
- Rave报表-非规则工资条制作(附:《初识Rave》)
- 为什么我引用函数Min的时候编译出错?
- 高手指教:怎么使用TADOQuery变量?
- 如何优化ado的速度?什么情况下不需要adoquery1.close ??大鸟帮我!
- ehlib 使用说明?????
- 如何显示出数据库服务器中得所有数据库?还有这个选中得数据库中所有得表
source:tfilestream;
sa:array[0..3] of byte;begin
Source:=TFileStream.Create('d:\test.dat',fmOpenRead or fmShareExclusive);
Source.Seek(0,soFromBeginning);
Source.Read(sa,sizeof(sa));
source.Free;
改为sa:array of string;
procedure TForm1.Button2Click(Sender: TObject);
var
source:tfilestream;
sa:array of byte;
i:integer;
begin
Source:=TFileStream.Create('c:\a.txt',fmOpenRead or fmShareExclusive);
// Source.Seek(0, soFromBeginning);
Source.Seek(soFromBeginning, 0);
setlength(sa, 5);
//Source.Read(sa, sizeof(sa));
ShowMessage(inttostr(length(sa)));
Source.Read(pbyte(sa)^, length(sa));
for i := 0 to 4 do
showmessage(inttostr(sa[i]));
source.Free;
end;
创建一个动态的数组,该数组内的数据并没有分配内存。。
setlength(sa,4);
只是设置动态的数组长度为4。sa:array[0..3] of byte;
创建一个静态数组。该数组内的数据已分配空间。。前面的没有出错,是因为变量没有初始化,没有分配内存空间。。懂了吗?
var
source:tfilestream;
sa:array of byte;
i, iLen:integer;
begin
iLen := 10;
Source:=TFileStream.Create('c:\a.txt',fmOpenRead or fmShareExclusive);
// Source.Seek(0, soFromBeginning);
Source.Seek(soFromBeginning, 0); setlength(sa, iLen);
ZeroMemory(pbyte(sa), length(sa));
for i := 0 to iLen - 1 do
memo1.Lines.Add(inttostr((sa[i]))); //Source.Read(sa, sizeof(sa));
Source.Read(pbyte(sa)^, length(sa));
for i := 0 to iLen - 1 do
memo1.Lines.Add(inttostr((sa[i]))); // 结果正确。
source.Free;
end;
{
动态数组 <<object pascal>>动态数组没有固定的尺寸或长度。取而代之的是,向动态数组赋值或把动态数组传递给SetLength过程时,动态数组的内存被重新分配。表示动态数组的结构具有如下形式
array of baseType
例如,
var MyFlexibleArray: array of Real;
这里声明了一个一维的实数动态数组。声明并不为MyFlexibleArray变量分配内存。要为数组创建内存,则需要调用SetLength标准过程。例如,对于上面给出的声明,
SetLength(MyFlexibleArray, 20);
这里分配了一个20个实数的数组,索引从0到19。动态数组总是以整数作为索引,而且索引总是以0开始。}