谈 Delphi 编程中"流"的应用
陈经韬
什么是流 流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流 中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作 的,而不用关心流的另一头数据的真正流向.流不但可以处理文件,还可以处理动态内存,网 络数据等多种数据形式.如果你对流的操作非常熟练,在程序中利用流的方便性,写起程序会 大大提高效率的. 下面,笔者通过四个实例:EXE 文件加密器,电子贺卡,自制 OICQ 和网络屏幕传输来说明 Delphi 编程中"流"的利用.这些例子中的一些技巧曾经是很多软件的秘密而不公开的,现在大 家可以无偿的直接引用其中的代码了. "万丈高楼平地起",在分析实例之前,我们先来了解一下流的基本概念和函数,只有在理解 了这些基本的东西后我们才能进行下一步.请务必认真领会这些基本方法.当然,如果你对它 们已经很熟悉了,则可以跳过这一步. 一,Delphi 中流的基本概念及函数声明 在 Delphi 中,所有流对象的基类为 TStream 类,其中定义了所有流的共同属性和方法. TStream 类中定义的属性介绍如下: 1,Size:此属性以字节返回流中数据大小. 2,Position:此属性控制流中存取指针的位置. Tstream 中定义的虚方法有四个: 1,Read:此方法实现将数据从流中读出.函数原形为: Function Read(var BufferCount:Longint):Longintvirtualabstract 参数 Buffer 为数据读出时放置的缓冲区,Count 为需要读出的数据的字节数,该方法返回值为 实际读出的字节数,它可以小于或等于 Count 中指定的值. 2,Write:此方法实现将数据写入流中.函数原形为: Function Write(var BufferCount:Longint):Longintvirtualabstract 参数 Buffer 为将要写入流中的数据的缓冲区,Count 为数据的长度字节数,该方法返回值为实 际写入流中的字节数. 3,Seek:此方法实现流中读取指针的移动.函数原形为: Function Seek(Offset:LongintOrigint:Word):Longintvirtualabstract 参数 Offset 为偏移字节数,参数 Origint 指出 Offset 的实际意义,其可能的取值如下: soFromBeginning:Offset 为移动后指针距离数据开始的位置.此时 Offset 必须大于或者等于零. soFromCurrent:Offset 为移动后指针与当前指针的相对位置. soFromEnd:Offset 为移动后指针距离数据结束的位置.此时 Offset 必须小于或者等于零.该方 法返回值为移动后指针的位置. 4,Setsize:此方法实现改变数据的大小.函数原形为: Function Setsize(NewSize:Longint)virtual 另外,TStream 类中还定义了几个静态方法: 1,ReadBuffer:此方法的作用是从流中当前位置读取数据.函数原形为: Procedure ReadBuffer(var BufferCount:Longint) 参数的定义跟上面的 Read 相同.注意:当读取的数据字节数与需要读取的字节数不相同时, 将产生 EReadError 异常. 2,WriteBuffer:此方法的作用是在当前位置向流写入数据.函数原形为: Procedure WriteBuffer(var BufferCount:Longint)
参数的定义跟上面的 Write 相同.注意:当写入的数据字节数与需要写入的字节数不相同时, 将产生 EWriteError 异常. 3,CopyFrom:此方法的作用是从其它流中拷贝数据流.函数原形为: Function CopyFrom(Source:TStreamCount:Longint):Longint 参数 Source 为提供数据的流,Count 为拷贝的数据字节数.当 Count 大于 0 时,CopyFrom 从 Source 参数的当前位置拷贝 Count 个字节的数据;当 Count 等于 0 时,CopyFrom 设置 Source 参数的 Position 属性为 0,然后拷贝 Source 的所有数据; TStream 还有其它派生类,其中最常用的是 TFileStream 类.使用 TFileStream 类来存取文件, 首先要建立一个实例.声明如下: constructor Create(const Filename:stringMode:Word) Filename 为文件名(包括路径),参数 Mode 为打开文件的方式,它包括文件的打开模式和共享 模式,其可能的取值和意义如下: 打开模式: fmCreate :用指定的文件名建立文件,如果文件已经存在则打开它. fmOpenRead :以只读方式打开指定文件 fmOpenWrite :以只写方式打开指定文件 fmOpenReadWrite:以写写方式打开指定文件 共享模式: fmShareCompat :共享模式与 FCBs 兼容 fmShareExclusive:不允许别的程序以任何方式打开该文件 fmShareDenyWrite:不允许别的程序以写方式打开该文件 fmShareDenyRead :不允许别的程序以读方式打开该文件 fmShareDenyNone :别的程序可以以任何方式打开该文件 TStream 还有一个派生类 TMemoryStream,实际应用中用的次数也非常频繁.它叫内存流,就 是说在内存中建立一个流对象.它的基本方法和函数跟上面是一样的. 好了,有了上面的基础后,我们就可以开始我们的编程之行了. 二,实际应用之一:利用流制作 EXE 文件加密器,捆绑,自解压文件及安装程序 我们先来说一下如何制作一个 EXE 文件加密器吧. EXE 文件加密器的原理:建立两个文件,一个用来添加资源到另外一个EXE 文件里面,称 为添加程序.另外一个被添加的 EXE 文件称为头文件.该程序的功能是把添加到自己里面的 文件读出来.Windows 下的 EXE 文件结构比较复杂,有的程序还有校验和,当发现自己被改变 后会认为自己被病毒感染而拒绝执行.所以我们把文件添加到自己的程序里面,这样就不会改 变原来的文件结构了.我们先写一个添加函数,该函数的功能是把一个文件当作一个流添加到 另外一个文件的尾部.函数如下: Function Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean var Target,Source:TFileStream MyFileSize:integer begin try Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive) Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive) try Target.Seek(0,soFromEnd)//往尾部添加资源
- getscreen > 编程中"流"的应用
-
编程中"流"的应用
下载该文档 文档格式:PDF 更新时间:2006-06-02 下载次数:0 点击次数:1文档基本属性 文档语言: 文档格式: pdf 文档作者: Administrator 关键词: 主题: 备注: 点击这里显示更多文档属性 经理: 单位: 分类: 创建时间: 上次保存者: 修订次数: 编辑时间: 文档创建者: 修订: 加密标识: 幻灯片: 段落数: 字节数: 备注: 演示格式: 上次保存时间:
- 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
- PDF格式下载
- 更多文档...
-
上一篇:因为近来想写个类似于远程桌面监控的程序
下一篇:一:传统的屏幕传输方法与缺点
点击查看更多关于getscreen的相关文档
- 您可能感兴趣的
- getscreen下载 getscreen错位 googlegetscreen getscreen出错 getscreen教程 getscreenv1.5.0.0 getscreen怎么用 getscreen1.5 getscreenv1.5 getscreen上帝之眼
- 大家在找
-
- · 西安建筑大学研究生院
- · 吴江盛泽纺织厂
- · 压力容器设计
- · 河北邯郸贴吧
- · 机械发动机构造与维修
- · 经济法概论自考
- · 医学免疫学实验教程
- · 2010四川高考分数线
- · 潍坊地区天气预报
- · 锁模电子尺
- · 慢波型微波干燥机
- · vmware虚拟机安装教程
- · 上海红玲婚庆
- · 斗龙战士百度百科
- · 理论力学静力学课后习题答案
- · 遵化贴吧出租房屋
- · 2009年春季江苏省计算机一级VB
- · 湖北二汽生产实习总结
- · 变电所电气主接线图
- · 不见不散视频驱动
- · matlab矩阵元素个数
- · sopc彩条发生器
- · 音响diy
- · 3dmax2009英文注册机
- · 3edu教育网下载教程
- · 杠杆阻力臂的画法
- · 深圳社保卡电脑号查询
- · nike360官网专卖店
- · 长江三峡水利枢纽工程
- · 多媒体课件文本说明
- 赞助商链接