各位同仁看看这个程序吧,跟TFileStream有关(100分)

  • 主题发起人 主题发起人 凌云景
  • 开始时间 开始时间

凌云景

Unregistered / Unconfirmed
GUEST, unregistred user!
我往一个文件里面写一个整形值:65535
可是无法写对。代码如下:
function TTableStream.FieldValueByName(const index: integer;
buffer: Variant): boolean;
var
selField : TField;
begin
Result := True;
try
selField := Fields.GetField(index);
FRecStream.Seek(selField.pos,soFromBeginning);
FRecStream.Write(buffer,SizeOf(selField.length));
except
Result := False;
end;
end;
 
selField可以先不Create吗?
 
可能与buffer: Variant这个类型有关,你试试在写前将它用一个中间变量转换成你实际的类型.
另外,好象Tfield没有pos这个属性或方法.
 
注意:TField是我自己定义的一个结构,不用创建,另外,对于BUFFER我试了按照windbell,写入出现问题,写错了内容了
继续关注...
 
procedure TForm1.Button1Click(Sender: TObject);
var
f:Tfilestream;
x:integer;
begin
f:=Tfilestream.Create('d:/ttt',fmCreate);
x:=1234567890;
f.WriteBuffer(x,sizeof(x));
x:=22222;
f.WriteBuffer(x,sizeof(x));
f.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
f:Tfilestream;
x:integer;
begin
f:=Tfilestream.Create('d:/ttt',fmOpenReadWrite );
f.readBuffer(x,sizeof(x));
showmessage(inttostr(x));
f.readBuffer(x,sizeof(x));
showmessage(inttostr(x));
//改第一个再读
f.Position :=0;
x:=1111111;
f.WriteBuffer(x,sizeof(x));
f.Position :=0;
f.readBuffer(x,sizeof(x));
showmessage(inttostr(x));

f.Free;
end;
 
a:dword=65535;
.writebuffer(dword,2);
 
把BUFFER转换成dword
 
同意 卡色。
 
.writebuffer(a,4);
 
->对于BUFFER我试了按照windbell,写入出现问题,写错了内容了
是写入后再读出出错,还是在写入时变量的值就是错的?你监视一下中间变量的值看一看。
 

Similar threads

后退
顶部