把文件 这样操作了 想读取 里面指定位置,怎么弄?

aaa2520 2007-04-20 12:21:35
af.seek(k,soFromBeginning);

然后 用什么?
af.read ()?
af.readbuff()?
这两个 又什么区别 啊?
参数 都是什么意思?
为什么总出错啊
...全文
180 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
HsWong 2007-04-20
  • 打赏
  • 举报
回复
查一下Delphi里的帮助
chenzhuo 2007-04-20
  • 打赏
  • 举报
回复
Stream.Read(iSize,SizeOf(Integer));对应于
Stream.Write(iSize,SizeOf(Integer));

因为之前写了一个整数进去,32位的系统是4个字节,具体由SizeOf去计算
读出来的时候也是相应读出4个字节出来,并把数据放在iSize里.

SetLength就是设置字符串的长度,就好象
var
a: array of char; //动态数组

SetLength(a,10);
aaa2520 2007-04-20
  • 打赏
  • 举报
回复
Stream.Read(iSize,SizeOf(Integer));
SetLength(Buffer,iSize);

这两句 不太懂,
能解释解释吗?
aaa2520 2007-04-20
  • 打赏
  • 举报
回复
谢谢 
好像 明白了一点

十分感谢
chenzhuo 2007-04-20
  • 打赏
  • 举报
回复
一样的
procedure TStream.ReadBuffer(var Buffer; Count: Longint);
begin
if (Count <> 0) and (Read(Buffer, Count) <> Count) then
raise EReadError.CreateRes(@SReadError);
end;
function Read(var Buffer; Count: Longint): Longint; virtual; abstract;

ReadBuffer是一个过程,会判断你要读取大小与实际读到的数据大小是否一样,如果不一样
会抛出一个异常.
而Read是一个函数,读取数据并返回实际读到的数据的大小,TStream里的Read是一个
抽象函数,留到他的子类来实现,这是一种"模版模式"的设计!

例子:
procedure TForm1.Button1Click(Sender: TObject);
const
str = 'fwjoeowehgowejgowehf';
var
Stream: TStream;
iSize: Integer;
Buffer: String;
begin
Stream := TFileStream.Create('c:\test.txt',fmCreate);
iSize := Length(str);
Stream.Write(iSize,SizeOf(Integer));
Stream.Write(str,iSize);

Stream.Position := 0;
Stream.Read(iSize,SizeOf(Integer));
SetLength(Buffer,iSize);
Stream.Read(Buffer[1],iSize);

ShowMessage(Buffer);
Stream.Free;
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧