首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

把文件 这样操作了 想读取 里面指定位置,如何弄

2012-02-08 
把文件 这样操作了 想读取 里面指定位置,怎么弄?af.seek(k,soFromBeginning)然后 用什么?af.read()?af.re

把文件 这样操作了 想读取 里面指定位置,怎么弄?
af.seek(k,soFromBeginning);

然后 用什么?
af.read     ()?
af.readbuff()?
这两个 又什么区别 啊?
参数 都是什么意思?
为什么总出错啊

[解决办法]
查一下Delphi里的帮助
[解决办法]
一样的
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;

[解决办法]
Stream.Read(iSize,SizeOf(Integer));对应于
Stream.Write(iSize,SizeOf(Integer));

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

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

SetLength(a,10);

热点排行