会者不难--关于按指定格式读写二进制文件中的指定位置(20分)

  • 主题发起人 主题发起人 SuperJS
  • 开始时间 开始时间
S

SuperJS

Unregistered / Unconfirmed
GUEST, unregistred user!
我想按指定的数据类型格式,读取一个二进制文件中指定的位置。
我用了TFileStream,设置Postion但是没有效果,
比如说我想读取一个四个字节的integer型数据Buffer到底该怎么写呢?
万分感谢!
 
没人来看看吗???
 
var
i:Integer;
s:TFileStream;
begin
s:=TFileStream.Create('data.bin',fmOpenRead);
s.Seek(200,soFromBeginning);
s.Read(i,4);
ShowMessage(Format('%x',));
s.Free;
end;
 
但是如果我要读的是2个字节的integer数据的话好像不可以唉,
前面会有莫名其妙的值,我把Read改成2了,还是不行!
 
我昏
integer本身就占4个字节
定义的时候定义i:smallint;
这个时候才是16位的
 
>>前面会有莫名其妙的值
你应该在读取之前将i清零——因为Integer有4Bytes,你的读取过程仅仅修改了其中的2Bytes,
另外的2Bytes是无法预测的。

s.Seek(200,soFromBeginning);
i:=0; //清空
s.Read(i,2); //读取2Bytes
 
一会没来看,都被别人说去啦~~
他们说的都是对的,结帖子吧
 
不好意思,各位,这个我知道了,但是又有一个问题了,
比如说我测试的时候先write一个数值进去,然后马
上read,但是问题出来了,这个时候read出来的值都为0,
read和write用的Buffer是同一个!
这样有什么问题吗?
 
可惜这里不可以象csdn一样加分,不过大家都很热情啊,我再问个问题!
我想判断一个对象是不是已经创建该怎么写呢?
在我的程序中
begin
if mObj<>nil then FreeAndNil(mObj); //防止另外的过程没有执行
mObj:=TObject.Create(...);

end   


在另外的过程中有 FreeAndNil(mObj);


但是我这样写是不对的,机器会死掉啊!各位再帮帮忙吧!
 
对了,我补充一点,我打开文件方式是:fmShareDenyNone+fmOpenReadWrite!
谢谢先!
 
废话,write之后,指针就跳了,要seek到你刚才写的地方在读
机器死掉还不至于吧, if Assigned(mObj) then xxxx就行了
 
特别感谢kindly对我的帮助,
小弟用vb时间比较长,刚开始学Delphi6,
不太习惯还请各位多多帮忙!
小弟这里先谢过各位了!
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
915
SUNSTONE的Delphi笔记
S
后退
顶部