var DataFile: file;
对无类型文件,Reset和Rewrite过程允许你使用额外的参数来指定传输数据时记录的大小。因为历史原因,默认的记录大小是128字节。只有记录的大小为1时,才能正确反映任何文件的实际大小。
除了Read和Write,所有作用于类型文件的过程和函数也能用于无类型文件。代替Read和Write,BlockRead和BlockWrite两个过程用于高速数据传输。
Text-file device drivers(文本文件设备驱动)
Text-file device drivers: Overview(概述)
你可以为程序定义自己的文本文件设备驱动。文本文件设备驱动由4个函数组成,它们完全实现了Object Pascal文件系统和一些设备间的接口。
这4个函数每一个定义一个设备驱动,它们是Open、InOut、Flush和Close。每个函数的声明(函数头)都是
function DeviceFunc(var F: TTextRec): Integer;
这里,DeviceFunc是函数的名称(也就是Open、InOut、Flush或Close)。设备接口函数的返回值变成IOResult的返回值。若返回值是0,则操作成功。
要把设备接口函数和指定的文件相关联,你必须写一个定制的Assign过程。Assign过程必须把4个设备接口函数的地址赋给文本文件变量的的4个函数指针;并且,它必须在Mode字段存储fmClosed“魔术”常量,在BufSize字段存储文本文件缓冲区的大小,在BufPtr字段存储指向文本文件缓冲区的指针,并且把Name字段清除。
比如,假设4个设备接口函数叫做DevOpen、DevInOut、DevFlush和DevClose,Assign过程应该看起来这样:
procedure AssignDev(var F: Text);
begin
with TTextRec(F) do
begin
Mode := fmClosed; //“魔术”常量
- 125 -
Standard routines and I/O
BufSize := SizeOf(Buffer);
BufPtr := @Buffer;
OpenFunc := @DevOpen; // 缓冲区大小 // 缓冲区地址 // 把4个设备接口函数的地址赋给相应字段
InOutFunc := @DevInOut;
FlushFunc := @DevFlush;
CloseFunc := @DevClose;
Name[0] := #0;// 把Name清除
end;
end;
设备接口函数能使用文件记录(file record)中的UserData字段存储私有信息,在任何时候文件系统都不会修改这个字段。
Device functions(设备函数)
组成文本文件设备驱动的函数如下所述。
Open(打开)函数:
Open函数被Reset、Rewrite和Append标准过程调用,用来打开一个和设备关联的文本文件。在入口,Mode字段包含fmInput、fmOutput或fmInOut来指示Open函数是否被Reset、Rewrite或Append调用。 Open函数根据Mode值来准备文件是被输入或输出。若指定了fmInOut(表示Open函数被Append调用),在Open函数返回前,它必须被改为fmOutput。
Open总是在其它设备接口函数之前被调用,因为这个原因,AssignDev只是初始化OpenFunc字段,把其余的工作(给字段赋函数地址)留给Open函数。基于Mode值,Open能设置输入或输出目的的(函数)指针。通过判断当前的状态,可以省却InOut、Flush函数和CloseFile过程。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-93.html
当然不会专注于武器装备的探讨
搞不懂他们连鉴定对象是谁都不知道还要鉴定什么
正解