- 浏览: 138632 次
- 性别:
文章分类
最新评论
一、流的概念
流简单说是建立在面向对象基础上的一种抽象的处理数据的工具,它定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员只需掌握对流进行操作,而不用关心流的另一头数据的真正流向。其实,流就是把整个对象转化为一个一个单字节数据,然后形成数据流,其形同把固体石块打碎成一颗颗细小的沙子一样,最后可以形成流沙。
二、流的主要功能
流的主要功能是对文件与非文件数据相互转换进行操作(即它们之间的I/O操作)。如将图片文件保存到数据库,那么数据库中的图片数据就变成非文件数据了,它只属于某记录某字段的数据。而诸如网络上传输的数据、内存中的存储的数据等也都属于非文件数据,这些数据要转变成文件也需要流操作。
三、Delphi中流的基本概念及函数声明
㈠流的属性
在Delphi中,所有流对象的基类为Tstream类,其中定义了所有流的共同属性和方法。以下为Tstream类中定义的属性:
1.Size:此属性以字节返回流中数据大小。
2.Position:此属性控制流中存取指针的位置。
㈡Tstream定义的虚方法:
1. Read:此方法实现将数据从流中读出。
函数原形为:
Function Read(var Buffer;Count:Longint):Longint;virtual;abstract;
参数Buffer为数据读出时放置的缓冲区,Count为需要读出的数据的字节数,该方法返回值为实际读出的字节数,它可以小于或等于Count中指定的值。
2.Write:此方法实现将数据写入流中。
函数原形为:
Function Write(var Buffer;Count:Longint):Longint;virtual;abstract;
参数Buffer为将要写入流中的数据的缓冲区,Count为数据的长度字节数,该方法返回值为实际写入流中的字节数。
3、Seek:此方法实现流中读取指针的移动。
函数原形为:
Function Seek(Offset:Longint;Origint:Word):Longint;virtual;abstract;
参数Offset为偏移字节数,参数Origint指出Offset的实际意义,其可能的取值如下:
soFromBeginning:Offset为移动后指针距离数据开始的位置。此时Offset必须大于或者等于零。
soFromCurrent:Offset为移动后指针与当前指针的相对位置。
soFromEnd:Offset为移动后指针距离数据结束的位置。此时Offset必须小于或者等于零。该方法返回值为移动后指针的位置。
4、Setsize:此方法实现改变数据的大小。函数原形为:
Function Setsize(NewSize:Longint);virtual;
㈢Tstream类定义的静态方法:
1. ReadBuffer:此方法的作用是从流中当前位置读取数据。
函数原形为:
Procedure ReadBuffer(var Buffer;Count:Longint);
参数的定义跟上面的Read相同。注意:当读取的数据字节数与需要读取的字节数不相同时,将产生EReadError异常。
2. WriteBuffer:此方法的作用是在当前位置向流写入数据。
函数原形为:
Procedure WriteBuffer(var Buffer;Count:Longint);
参数的定义跟上面的Write相同。注意:当写入的数据字节数与需要写入的字节数不相同时,将产生EWriteError异常。
3. CopyFrom:此方法的作用是从其它流中拷贝数据流。
函数原形为:
Function CopyFrom(Source:Tstream;Count:Longint):Longint;
参数Source为提供数据的流,Count为拷贝的数据字节数。当Count大于0时,CopyFrom从Source参数的当前位置拷贝Count个字节的数据;当Count等于0时,CopyFrom设置Source参数的Position属性为0,然后拷贝Source的所有数据;
㈣Tstream派生类
1. TFileStream类(文件流)。
使用TFileStream类来存取文件,首先要建立一个实例。声明如下:
constructor Create(const Filename:string;Mode:Word);
Filename为文件名(包括路径),参数Mode为打开文件的方式,它包括文件的打开模式和共享模式,其可能的取值和意义如下:
打开模式:
fmCreate :用指定的文件名建立文件,如果文件已经存在则打开它。
fmOpenRead :以只读方式打开指定文件
fmOpenWrite :以只写方式打开指定文件
fmOpenReadWrite:以写写方式打开指定文件
共享模式:
fmShareCompat :共享模式与FCBs兼容
fmShareExclusive:不允许别的程序以任何方式打开该文件
fmShareDenyWrite:不允许别的程序以写方式打开该文件
fmShareDenyRead :不允许别的程序以读方式打开该文件
fmShareDenyNone :别的程序可以以任何方式打开该文件
2. TmemoryStream类(内存流)
实际应用内存流使用也非常多,就是说在内存中建立一个流对象,它的基本方法和函数跟上面是一样的。
Source:=TMemoryStream.Create;
3.TresourceStream(资源流)
资源流主要应用于对资源文件的操作。
㈤与流操作的一些相关函数和方法
1.sizeof(变量:Integer):获得变量所占空间的大小。
2.流类变量.SaveToFile(目标文件名):将流转变为文件保存。
3.其它类变量.SaveToStream(流类变量):将类变量内容转变为流。
4. 其它类变量.LoadFromFile(目标文件名):将文件加载到其它类变量。
5. 其它类变量.LoadFromStream(流类变量):将流类变量加载到其它类变量。
6. 流类变量.Free:释放流。
四、Delphi流的常用操作方法
㈠将文件转换为文件流
var Source: TFileStream;
begin
Source:=TFileStream.Create(源文件,fmOpenRead or fmShareExclusive);
End;
以上代码的意义是:将源文件以只读或者禁止任何方式打开文件的方式打开,并创建成文件流的形式,最后将其赋值给文件流变量Source。
㈡将文件转换为内存流
var Source: TMemoryStream;
begin
Source:=TMemoryStream.Create;
Source.LoadFromFile(源文件);
End;
以上代码的意义是:创建一个内存流变量Source,并将源文件加载到流变量Source中。
㈢将内存流保存成文件
var Target: TMemoryStream;
begin
Target.SaveToFile(‘目标文件’);
end;
注意,文件流一经创建就是以文件的形式保存在磁盘中,因此没有像内存流一样有转换成文件的操作。
㈣将其它类变量转变为流变量
var BmS: TMemoryStream;
Bitmap1:TBitmap;
begin
Bitmap1.SaveToStream(BmS);
end;
㈤将两个流合并
var
Target, Source: TFileStream;
begin
Source:=TFileStream.Create(辅文件, fmOpenRead or fmShareExclusive);
Target:=TFileStream.Create(主文件, fmOpenWrite or fmShareExclusive);
Target.Seek(0, soFromEnd);//将指针移到主文件的末尾
Target.CopyFrom(Source, 0);//注意:两个流合并使用CopyFrom方法。
Target.Free;
Source.Free;
end;
以上程序实际为两个文件合并的操作,即将辅文件添加到主文件的后面,最后变成一个文件。需要注意的是两个流合并需要先将指针移到主文件末尾,然后再将辅文件添加进来。该方法可用于文件加密、木马捆绑、病毒传染等。
㈥将两个流分离
var
Source: TFileStream;
Target: TMemoryStream;
MyFileSize: integer;
Begin
MyFileSize:=辅文件长度;
Target :=TMemoryStream.Create;
Source:=TFileStream.Create(主文件, fmOpenRead or
fmShareDenyNone);
Source.Seek(-MyFileSize, soFromEnd); //定位到资源位置
//注意:这里面-sizeof(MyFileSize)的原表达式是0-SizeOf(MyFileSize)。意思将指针移到离末尾MyFileSize个字节处,准备从该处起读取数据。参数soFromEnd就是“离末尾”的意思,如果参数是soFromBeginning,那就是“离前面”的意思。
Target.CopyFrom(Source, MyFileSize); //取出资源
Target.SaveToFile(TargetFile); //存放到文件
Target.Free;
Source.Free;
end;
上述程序实现的功能实际是将两个合并的文件分离开来。该方法还可用于文件的分割、文件加密等。学习时请注意其指针移动的方法。
发表评论
-
Delphi中的接口和抽象类
2010-12-06 16:30 608接口:Interface Delphi中接口的关键字 ... -
Delphi中票据凭证的精确打印
2011-04-06 15:13 1015一、概述 在银行,税务,邮政等行业的实际工作中,经常涉及到在 ... -
Pascal与C的指针
2011-05-26 13:49 1060大家都认为,C语言 ... -
Delphi编程的一些资料1
2011-06-16 10:40 766手机 SMS PDU 格式参考手册 1.相关的GSM AT指 ... -
Delphi编程的一些资料2
2011-06-16 10:43 747算法步骤: 一、地址 ... -
Delphi编程的一些资料3
2011-06-16 10:46 817一、一般命令 AT+CGMI ... -
Delphi编程的一些资料4
2011-06-16 10:48 818七、追加服务命令 AT+CCFC 呼叫继续 ... -
Delphi编程的一些资料5
2011-06-16 10:53 802十三、SIM卡工具箱命令 AT+STSF ... -
短信文本模式下的解码方法
2011-06-16 10:57 823接收短信有两种编码格式: 1.中英文混合的为unicode 2 ... -
通过注册表获取当前所有串口号
2011-06-16 15:49 2737usesWindows, Messages, SysUtils ... -
Delphi 分隔GSMModem接收到的短信字符串
2011-06-20 10:37 1118Delphi 分隔GSMModem接收到的短信字符串 ... -
Delphi流的操作
2011-06-22 14:34 836Delphi流的操作 一、流的概念 流简单说是建立在面 ... -
Delphi、PChar和Char数组的比较
2011-06-22 16:14 1308Delphi、PChar和Char数组的 ... -
Delphi 判断数据库表是否存在
2011-06-26 12:54 1123//根据表名和一个数据库连接判断表是否存在 function ... -
Delphi ListView基本用法大全
2011-08-22 17:27 1407Delphi ListView基本用法大全 //增加项或列( ... -
Delphi2010 无效的类别字符串, ProgID: "ADOX.Catalog"问题
2012-07-18 09:56 2138程序中用ADOX创建的Access数据库,一直运行正常,其 ... -
Delphi 禁用TEdit右键菜单及复制粘贴
2012-07-19 11:24 1400Delphi 禁用TEdit右键菜单及复制粘贴简的单方法 ... -
Delphi TStrings取得Ini文件键值对
2012-07-20 07:37 1361Delphi TStrings取得Ini文件键值对的简单 ... -
Delphi 压缩Access数据库
2012-07-21 12:21 1677由于Access数据库在反复使用过程中会自动增大,Del ...
相关推荐
《Delphi编程技巧集》是一本全面探讨Delphi编程技巧的资源宝典,旨在帮助开发者提升在使用Delphi进行软件开发时的效率和代码质量。Delphi,作为一款强大的RAD(快速应用程序开发)工具,以其高效的VCL框架和对对象 ...
Delphi 深度编程及其项目应用开发Delphi 深度编程及其项目应用开发Delphi 深度编程及其项目应用开发Delphi 深度编程及其项目应用开发Delphi 深度编程及其项目应用开发Delphi 深度编程及其项目应用开发Delphi 深度...
《Delphi深度编程及其项目应用开发》是一本深入探讨Delphi编程技术和实践应用的专业书籍。在本书中,我们将全面解析Delphi编程的核心概念、高级特性以及如何将其应用于实际项目开发中,帮助读者从初级程序员晋升为...
《Delphi 深度编程及其项目应用开发》 作 者: 李存斌 汪兵 编著 丛书名: 万水软件项目应用与实例开发丛书 出版社: 中国水利水电出版社 出 版: 2002-9----------简 介 本书是在总结作者多年Delphi开发经验的基础上...
delphi经典编程入门.chm 第一章 Delphi快速入门(一) 第一章 Delphi快速入门(二) 第一章 Delphi快速入门(三) 第一章 Delphi快速入门(四) 第一章 Delphi快速入门(五) 第二章 Delphi面向...
DELPHI编程手册3.0.rar 是一个针对DELPHI编程语言的综合资源包,它包含了一份详尽的编程手册,旨在帮助开发者深入理解和熟练掌握DELPHI编程技术。DELPHI是一种基于对象 Pascal 语言的集成开发环境(IDE),由...
《Delphi编程手册.v2.0》是一本专为Delphi开发者设计的综合指南,它涵盖了从基础到高级的各种编程技巧和实践经验。Delphi是一种基于Object Pascal语言的集成开发环境(IDE),以其高效的代码生成、丰富的组件库和...
9. **网络编程**:Delphi提供了一系列的网络组件,如TIdHTTP和TIdTCPClient,用于创建网络应用。书中可能会讲解如何使用这些组件进行HTTP请求、套接字通信等。 10. **国际化与本地化**:Delphi支持创建多语言应用,...
这个资源包包含四个主要部分:网络与通信、应用编程起步、数据库应用和图形图像处理,每个部分都提供了源代码和编译后的程序,方便开发者学习和参考。 1. **网络与通信**: 在这一部分,你将学习如何利用Delphi...
1. **DELPHI编程基础**:DELPHI的语法与Pascal紧密相关,注重面向对象编程,提供了丰富的类库和组件,使得开发者能够快速构建图形用户界面(GUI)应用程序。资料包可能包含了基础教程,帮助初学者理解类、对象、继承...
Delphi编程技术全集 包括:Delphi7中使用Rave报表.chm;Delphi 7应用编程150例.chm;Delphi编程五大妙招.exe;Delphi技巧集C.chm;DELPHI经典编程入门.chm;ExpressQuantumGrid4.5 中文教程 by TT8.exe.
本书"Delphi编程典型实例解析"显然是一本旨在帮助读者深入理解和掌握Delphi编程的书籍,通过丰富的实例来解释和展示Delphi的特性和应用。 在Delphi编程中,我们通常会涉及到以下几个关键知识点: 1. **对象 Pascal...
DELPHI编程技巧集锦是一份专门针对DELPHI编程语言的教程资料,它涵盖了多种高级和实用的编程技巧,旨在帮助开发者提升编程效率和代码质量。DELPHI是一种基于对象 Pascal 的强大集成开发环境(IDE),常用于构建桌面...
《Delphi深度编程及其项目应用开发》是一本深入探讨Delphi编程技术和实践应用的书籍,旨在帮助开发者充分利用Delphi的强大功能进行高效的软件开发。Delphi,由Borland公司(现Embarcadero Technologies)开发,是一...
总之,《Delphi编程起步》将引导你走进Delphi的世界,通过系统的学习,你将能够独立设计和实现功能丰富的Windows应用程序,甚至扩展到跨平台开发。随着对Delphi的深入理解和实践,你会发现它是一种强大且灵活的开发...
该手册旨在帮助开发者掌握Delphi的各个方面,包括语法、控件使用、数据库接口、网络编程以及应用程序设计。 1. Delphi基础:Delphi是基于Pascal语言的,它提供了直观的可视化界面设计工具,允许开发者通过拖放控件...
Delphi是一种强大的面向对象的编程环境,主要用于Windows平台的应用程序开发。它基于Pascal语言,提供了高效的编译器和直观的集成开发环境(IDE)。在本压缩包中包含的7本Delphi编程资料电子书,对于初学者来说是...
《Delphi深度编程及其项目应用开发 源码》是一个针对高级Delphi程序员的资源集合,旨在帮助开发者深入了解Delphi编程语言的精髓,并通过实际项目应用的源代码学习如何在实践中运用这些知识。这个压缩包包含了一系列...
《Delphi 7应用编程150例》是一本针对Delphi 7开发环境的实践教程,旨在帮助学习者深入理解和掌握Delphi编程技术。这本书包含150个实例,覆盖了Delphi 7开发中的各个方面,从基础的控件使用、事件处理,到复杂的...