⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 051.htm

📁 Delphi基础知识讲座
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<p> </font><font face="Arial"></p>
<p>20.1.2 THandleStream</font><font face="宋体" lang="ZH-CN">对象</p>
<p> </p>
<p>  </font><font face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">对象的行为特别象</font><font
face="Arial">FileStream</font><font face="宋体" lang="ZH-CN">对象,所不同的是它通过已创建的文件句柄而不是文件名来存储流中的数据。</p>
<p>  </font><font face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">对象定义了</font><font
face="Arial">Handle</font><font face="宋体" lang="ZH-CN">属性,该属性提供了对文件句柄的只读访问,并且</font><font
face="Arial">Handle</font><font face="宋体" lang="ZH-CN">属性可以作为</font><font
face="Arial">Delphi</font><font face="宋体" lang="ZH-CN">的</font><font face="Arial">RTL</font><font
face="宋体" lang="ZH-CN">文件管理函数的参数,利用文件类函数来读写数据。</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">覆盖了构造函数</font><font
face="Arial">Create</font><font face="宋体" lang="ZH-CN">,该函数带有</font><font
face="Arial">Handle </font><font face="宋体" lang="ZH-CN">参数,该参数指定与</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">对象相关的文件句柄。</p>
<p> </font><font face="Arial"></p>
<p>20.1.2.1 THandleStream</font><font face="宋体" lang="ZH-CN">的属性的方法:</p>
<p> </p>
<p>  </font><font face="Arial">1. Handle</font><font face="宋体" lang="ZH-CN">属性</p>
<p>  声明:</font><font face="Arial">property Handle: Integer; </p>
<p>Handle</font><font face="宋体" lang="ZH-CN">属性提供了对文件句柄的只读访问,该句柄由</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">的构造方法</font><font
face="Arial">Create</font><font face="宋体" lang="ZH-CN">传入。因此除了用</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">提供的方法外,也可以用文件管理函数对句柄进行操作。实际上,</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">的方法在实现上也是运用文件管理函数进行实际的读写操作。</p>
<p>  </font><font face="Arial">2. Create</font><font face="宋体" lang="ZH-CN">方法</p>
<p>  声明:</font><font face="Arial">constructor Create(AHandle: Integer); </font><font
face="宋体" lang="ZH-CN"></p>
<p>  </font><font face="Arial">Create</font><font face="宋体" lang="ZH-CN">方法使用传入的</font><font
face="Arial">Handle</font><font face="宋体" lang="ZH-CN">参数创建一个与特定文件句柄相联的</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">对象,并且将</font><font
face="Arial">AHandle</font><font face="宋体" lang="ZH-CN">赋给流的</font><font
face="Arial">Handle</font><font face="宋体" lang="ZH-CN">属性。</p>
<p> </p>
<p>  </font><font face="Arial">3. Read</font><font face="宋体" lang="ZH-CN">、</font><font
face="Arial">Write</font><font face="宋体" lang="ZH-CN">和</font><font face="Arial">Seek</font><font
face="宋体" lang="ZH-CN">方法</p>
<p>  这三个方法是</font><font face="Arial">TStream</font><font face="宋体"
lang="ZH-CN">的虚方法,只是在</font><font face="Arial">THandleStream </font><font
face="宋体" lang="ZH-CN">中覆盖了这三个方法,以实现特定媒介──文件的数据存取。后面会详细介绍这三个方法的实现。</p>
<p> </font><font face="Arial"></p>
<p>20.1.2.2 THandleStream</font><font face="宋体" lang="ZH-CN">的实现原理</p>
<p> </p>
<p>  </font><font face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">是从</font><font
face="Arial">TStream</font><font face="宋体" lang="ZH-CN">继承来的,因此可以共用</font><font
face="Arial">TStream</font><font face="宋体" lang="ZH-CN">中的属性和大多数方法。</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">在实现上主要是增加了一个属性</font><font
face="Arial">Handle</font><font face="宋体" lang="ZH-CN">和覆盖了</font><font
face="Arial">Create</font><font face="宋体" lang="ZH-CN">、</font><font face="Arial">Read</font><font
face="宋体" lang="ZH-CN">、</font><font face="Arial">Write</font><font face="宋体"
lang="ZH-CN">和</font><font face="Arial">Seek</font><font face="宋体" lang="ZH-CN">四个方法。</p>
<p>  </font><font face="Arial">1. </font><font face="宋体" lang="ZH-CN">属性的实现</p>
<p>  </font><font face="Arial">Handle</font><font face="宋体" lang="ZH-CN">属性的实现正如</font><font
face="Arial">Delphi</font><font face="宋体" lang="ZH-CN">大多数属性的实现那样,先在对象定义的</font><font
face="Arial">private</font><font face="宋体" lang="ZH-CN">部分声明一个存放数据的变量</font><font
face="Arial">FHandle</font><font face="宋体" lang="ZH-CN">,然后在定义的</font><font
face="Arial">public</font><font face="宋体" lang="ZH-CN">部分声明属性</font><font
face="Arial">Handle</font><font face="宋体" lang="ZH-CN">,其中属性定义的读写控制部分加上只读控制,读控制只是直接读取</font><font
face="Arial">FHandle</font><font face="宋体" lang="ZH-CN">变量的值,其实现如下:</p>
<p> </font><font face="Arial"></p>
<p>THandleStream = class(TStream)</p>
<p>private</p>
<p>FHandle: Integer;</p>
<p>public</p>
<p></font><font face="宋体" lang="ZH-CN">…</font><font face="Arial"></p>
<p>property Handle: Integer read FHandle;</p>
<p>end;</p>
<p></font> <font face="Arial"></p>
<p>2. </font><font face="宋体" lang="ZH-CN">方法的实现</p>
<p>  </font><font face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">的</font><font
face="Arial">Create</font><font face="宋体" lang="ZH-CN">方法,以</font><font
face="Arial">AHandle</font><font face="宋体" lang="ZH-CN">作为参数,在方法里面只是简单的将</font><font
face="Arial">AHandle</font><font face="宋体" lang="ZH-CN">的值赋给</font><font
face="Arial">FHandle</font><font face="宋体" lang="ZH-CN">,其实现如下:</p>
<p> </font><font face="Arial"></p>
<p>constructor THandleStream.Create(AHandle: Integer);</p>
<p>begin</p>
<p>FHandle := AHandle;</p>
<p>end;</p>
<p></font> <font face="宋体" lang="ZH-CN"></p>
<p>  为实现针对文件的数据对象存储,</font><font face="Arial">THandleStream</font><font
face="宋体" lang="ZH-CN">的</font><font face="Arial">Read</font><font face="宋体"
lang="ZH-CN">、</font><font face="Arial">Write</font><font face="宋体" lang="ZH-CN">和</font><font
face="Arial">Seek</font><font face="宋体" lang="ZH-CN">方法覆盖了</font><font
face="Arial">TStream</font><font face="宋体" lang="ZH-CN">中的相应方法。它们的实现都调用了</font><font
face="Arial">Windows</font><font face="宋体" lang="ZH-CN">的文件管理函数。</p>
<p>  </font><font face="Arial">Read</font><font face="宋体" lang="ZH-CN">方法调用</font><font
face="Arial">FileRead</font><font face="宋体" lang="ZH-CN">函数实现文件读操作,其实现如下:</p>
<p> </font><font face="Arial"></p>
<p>function THandleStream.Read(var Buffer; Count: Longint): Longint;</p>
<p>begin</p>
<p>Result := FileRead(FHandle, Buffer, Count);</p>
<p>if Result = -1 then Result := 0;</p>
<p>end;</p>
<p></font> <font face="宋体" lang="ZH-CN"></p>
<p>  </font><font face="Arial">Write</font><font face="宋体" lang="ZH-CN">方法调用</font><font
face="Arial">FileWrite</font><font face="宋体" lang="ZH-CN">函数实现文件写操作,其实现如下:</p>
<p> </font><font face="Arial"></p>
<p>function THandleStream.Write(const Buffer; Count: Longint): Longint;</p>
<p>begin</p>
<p>Result := FileWrite(FHandle, Buffer, Count);</p>
<p>if Result = -1 then Result := 0;</p>
<p>end;</p>
<p></font> <font face="宋体" lang="ZH-CN"></p>
<p>  </font><font face="Arial">Seek</font><font face="宋体" lang="ZH-CN">方法调用</font><font
face="Arial">FileSeek</font><font face="宋体" lang="ZH-CN">函数实现文件指针的移动,其实现如下:</p>
<p> </font><font face="Arial"></p>
<p>function THandleStream.Seek(Offset: Longint; Origin: Word): Longint;</p>
<p>begin</p>
<p>Result := FileSeek(FHandle, Offset, Origin);</p>
<p>end;</p>
<p></font> <font face="Arial"></p>
<p>20.1.3 TFileStream</font><font face="宋体" lang="ZH-CN">对象</p>
<p> </p>
<p>  </font><font face="Arial">TFileStream</font><font face="宋体" lang="ZH-CN">对象是在磁盘文件上存储数据的</font><font
face="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象。</font><font
face="Arial">TFileStream</font><font face="宋体" lang="ZH-CN">是从</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">继承下来的,它和</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">一样都是实现文件的存取操作。不同之处在于</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">用句柄访问文件,而</font><font
face="Arial">TFileStream</font><font face="宋体" lang="ZH-CN">用文件名访问文件。实际上</font><font
face="Arial">TFileStream</font><font face="宋体" lang="ZH-CN">是</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">上的一层包装,其内核是</font><font
face="Arial">THandleStream</font><font face="宋体" lang="ZH-CN">的属性和方法。</p>
<p>  </font><font face="Arial">TFileStream</font><font face="宋体" lang="ZH-CN">中没有增加新的属性和方法。它只是覆盖了的构造方法</font><font
face="Arial">Create</font><font face="宋体" lang="ZH-CN">和析构方法</font><font
face="Arial">Destory</font><font face="宋体" lang="ZH-CN">。在</font><font
face="Arial">Create</font><font face="宋体" lang="ZH-CN">方法中带两个参数</font><font
face="Arial">FileName</font><font face="宋体" lang="ZH-CN">和</font><font face="Arial">Mode</font><font
face="宋体" lang="ZH-CN">。</font><font face="Arial">FileName</font><font face="宋体"
lang="ZH-CN">描述要创建或打开的文件名,而</font><font face="Arial">Mode</font><font
face="宋体" lang="ZH-CN">描述文件模式如</font><font face="Arial">fmCreate</font><font
face="宋体" lang="ZH-CN">、</font><font face="Arial">fmOpenRead</font><font
face="宋体" lang="ZH-CN">和</font><font face="Arial">fmOpenWrite</font><font
face="宋体" lang="ZH-CN">等。</font><font face="Arial">Create</font><font
face="宋体" lang="ZH-CN">方法首先使用</font><font face="Arial">FileCreate</font><font
face="宋体" lang="ZH-CN">或</font><font face="Arial">FileOpen</font><font face="宋体"
lang="ZH-CN">函数创建或打开名为</font><font face="Arial">FileName</font><font
face="宋体" lang="ZH-CN">的文件,再将得到的文件句柄赋给</font><font
face="Arial">FHandle</font><font face="宋体" lang="ZH-CN">。</font><font face="Arial">TFileStream</font><font
face="宋体" lang="ZH-CN">的文件读写操作都是由从</font><font face="Arial">THandleStream</font><font
face="宋体" lang="ZH-CN">继承的</font><font face="Arial">Read</font><FONT< P> </p>
<p>var</p>
<p>Stream: TStream;</p>
<p>begin</p>
<p>Stream := TFileStream.Create(FileName, fmCreate);</p>
<p>try</p>
<p>SaveToStream(Stream);</p>
<p>finally</p>
<p>Stream.Free;</p>
<p>end;</p>
<p>end;</p>
<p> <font face="宋体" lang="ZH-CN"></p>
<p>  在</font><font face="Arial">Delphi </font><font face="宋体" lang="ZH-CN">的许多对象的</font><font
face="Arial">SaveToStream </font><font face="宋体" lang="ZH-CN">和</font><font
face="Arial">SaveToFile</font><font face="宋体" lang="ZH-CN">、</font><font
face="Arial">LoadFromStream</font><font face="宋体" lang="ZH-CN">和</font><font
face="Arial">LoadFromFile</font><font face="宋体" lang="ZH-CN">方法的实现都有类似的嵌套结构。</p>
<p> </font><font face="Arial"></p>
<p>20.1.5 TMemoryStream</font><font face="宋体" lang="ZH-CN">对象</p>
<p> </p>
<p> </font> <font face="Arial">TMemoryStream</font><font face="宋体" lang="ZH-CN">对象是一个管理动态内存中的数据的</font><font
face="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象,它是从</font><font
face="Arial">TCustomMemoryStream</font><font face="宋体" lang="ZH-CN">中继承下来的,除了从</font><font
face="Arial">TCustomMemoryStream</font><font face="宋体" lang="ZH-CN">中继承的属性和方法外,它还增加和覆盖了一些用于从磁盘文件和其它注台读数据的方法。它还提供了写入、消除内存内容的动态内存管理方法。下面介绍它的这些属性和方法。</p>
<p> </font><font face="Arial"></p>
<p>20.1.5.1 TMemoryStream</font><font face="宋体" lang="ZH-CN">的属性和方法</p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -