delphi 基础之三 文件流操作

文件流操作

Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以处理动态内存、网络数据等多种数据形式。如果你对流的操作非常熟练,在程序中利用流的方便性,写起程序会大大提高效率的。

一、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还有其它派生类,其中最常用的是TFileStream类。使用TFileStream类来存取文件,首先要建立一个实例。声明如下:

constructor Create(const Filename:string;Mode:Word);

Filename为文件名(包括路径),参数Mode为打开文件的方式,它包括文件的打开模式和共享模式,其可能的取值和意义如下:

打开模式:

fmCreate :用指定的文件名建立文件,如果文件已经存在则打开它。

fmOpenRead :以只读方式打开指定文件

fmOpenWrite :以只写方式打开指定文件

fmOpenReadWrite:以写写方式打开指定文件

共享模式:

fmShareCompat :共享模式与FCBs兼容

fmShareExclusive:不允许别的程序以任何方式打开该文件

fmShareDenyWrite:不允许别的程序以写方式打开该文件

fmShareDenyRead :不允许别的程序以读方式打开该文件

fmShareDenyNone :别的程序可以以任何方式打开该文件

TStream还有一个派生类TMemoryStream,实际应用中用的次数也非常频繁。它叫内存流,就是说在内存中建立一个流对象。它的基本方法和函数跟上面是一样的。

转载于:https://www.cnblogs.com/bjxsky/p/4610257.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb 存储过程 遍历表数据_mongodb推荐存列表字段还是多条记录?

在 sql 下, 方案2更好. 在 mongo 下, 方案1更好.不知道你的这个项目中有没有用户权限组的概念.如果有权限组的话, 就是一个权限组的 collection 里面, 每个权限下保存了一个菜单项的数组.如果没有权限组的话, 就可以按照你说的方案1, 在每个用户表里, 或者单独的用户权限表里, …

学习小记----分层图最短路

前置知识 简单的图论知识 简单的dp知识 使用标志 你机智的发现了这是一道图论题,并且出现了类似于N次免费/花费变化的字样,大部分就是分层图最短路了. 它不是不是很难,就是那种,那种看起来很凶神恶煞的,你知道么&#…

gojs 节点右键点击事件_SWMM快速建模方法(3)—建立管线上下游节点编号

在SWMM中,管线需要输入上下游节点检查井编号,那么在GIS中可否实现自动获取上下游节点编号呢?思路是这样的,首先获得管线两端节点,然后对端点进行融合,删除重复的节点,最后根据坐标关系分别建立管…

android 设置setmultichoiceitems设置初始化勾选_Linux内核启动:虚拟盘空间设置和内存管理结构初始化...

1. 设置虚拟盘并初始化接下来main函数将对外设中的虚拟盘区进行设置。 检查makefile文件中"虚拟盘使用标志"是否设置, 以此确定系统是否使用了虚拟盘(假设有虚拟盘,大小设置为2 MB)。 操作系统从缓冲区的末端起开辟2MB内存空间设置为虚拟盘&am…

centos7 Failed to start iptables.service: Unit not found

在CentOS 7或RHEL 7或Fedora中防火墙由firewalld来管理 添加 firewall-cmd --zonepublic --add-port80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)firewall-cmd --zonepublic --add-port1000-2000/tcp --permanent 重新载…

关闭mysql服务的方法有哪些_MySQL--启动和关闭MySQL服务

介绍了启动服务器的两种方式,以及可能遇到的问题第一种:系统服务1)可以通过右击方式一步步找到服务右击计算机->选择管理->找到服务,然后双击打开,找到mysql,我安装的是mysql8.0所以服务的名称显示是mysql80&…

[浪风分享]很简单的查看电脑所支持的最大内存的方法--磨刀不误砍柴工

硬件操作系统====决定支持的最大内存  在开始---运行处输入cmd(或者按住winkdyR键输入CMD),打开命令窗口,输…

mysql mysar_使用mysar分析squid日志(日志存mysql)

需要的包:php5-mysql #安装后php才能联系数据库php5-commonphp5-cli #执行php脚本需要mysql-server开始安装:下载最新的mysar包tar zxvf mysar-2.0.6.tar.gz -C /usr/local-#将mysar解压到/usr/local下ln -s /usr/local/mysar/etc/mysar.apache /etc/apache2/…

mysql语句怎么记_Mysql常用语句(记一下,免得忘)

1、去掉某列记录中的特殊字符例如:/r,update test_table set keyreplace(key, char(13), );其他特殊字符类似。2、查询重复的记录Select weixinid From dianxin_highda_detail Group By weixinid Having Count(*)>1;3、从txt向数据库导入记录load dat…

ZSH终端 乱码问题

参考链接 CSDN 转载于:https://www.cnblogs.com/eat-too-much/p/11216073.html

mysql将数据导入mgr_MySQL 8.0.20 MGR数据迁移过程以及注意事项

1.背景近期由于业务调整,需要将Windows Server 2008 MySQL5.5数据库迁移到Windows Server 2012 MySQL8.0集群MGR中,由于实际部署时,有一台机器硬盘损坏,只能构建双节点MGR,在迁移以及应用迁移过程中遇到许多参数与迁移…

安装 搜狗输入法 ubuntu 18

命令 sudo dpkg -i sogoupinyin_2.2.0.0108_amd64.deb sudo apt --fix-broken install 转载于:https://www.cnblogs.com/eat-too-much/p/11216083.html

devstack mysql_DevStack部署OpenStack开发环境 - 问题总结

建议在使用DevStack搭建OpenStack开发环境前,先安装好开发工具包组.特别是gcc,主要一定是在yum update -y 之前,否则更新完系统后,在安装开发工具包会出现很多依赖包因为版本更新而无法安装.要部署OpenStack需要注意若电脑配置不高,我自己的经验是先最小化或基本Web安装,然后,再…

docker+mysql创建用户名密码_docker构建私有仓库并设置仓库用户和密码

#搭建私有镜像仓库[rootdocker_test opt]# docker pull registryUsing default tag: latestlatest: Pulling from library/registryGet https://registry-1.docker.io/v2/library/registry/manifests/sha256:b1165286043f2745f45ea637873d61939bff6d9a59f76539d6228abf79f87774…

linux 安装RabbitMQ 注意版本

Linux下安装RabbitMQ 一下载依赖包 1.下载Rabbitmq 所依赖的环境gcc、erlang包和rabbitmq包,这里演示是网上下载gcc 依赖 1yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xzerla…

mysql更新写入数据_七、MySQL插入、更新与删除数据

存储在系统中的数据是数据库管理系统(DBMS)的核心,数据库被设计用来管理数据的存储、访问和维护数据的完整性。MySQL中提供丰富的数据管理语句,包括插入数据的INSERT、更新数据的UPDATE以及删除数据的DELETE语句。7.1、插入数据为表的所有字段插入数据使…

mysql语句随机数_程序生成随机数与SQL语句生成随机数

随机数可以通过程序生成,也可以通过SQL语句生成。通过程序生成随机数时一般采用硬件的编号时间作为种子,这种方法在瞬间插入数据库N条数据的时候会影响随机数的效果,生成很多相邻的插入值相同。所以频繁插入时可以使用SQL语句的内置函数生成随…

BPM的四大主要类型

随着网络的发展,移动BPM、社交BPM、云端BPM将顺应市场需求,成为BPM发展的新趋势,最终成为企业即时管控有效工具。BPM将不断促进制造业信息化的转型与发展。所以很少人会否认业务流程管理(BPM)的价值,更不用说给BPM一个全面定义。根…

jquery.js把我的时间修改了为什么?_电气老手在PLC程序调试修改时的几个必备小窍门,看你知道几个?...

我们工程师在设计程序,调试程序,修改程序的时候,为了方便以后对程序的理解,最好是对程序进行注释,能够对程序进行注释也是比较好的一个习惯。为什么这么说呢?因为我们人的脑容量是有限的,或多或…

rpm命令包安装mysql_CentOS7使用rpm包安装mysql 5.7.18

说明本文写于2017-05-20,使用MySQL-5.7.18。操作系统为64位CentOS Linux release 7.2.1511 (Core),以桌面形式安装。卸载MariaDBCentOS7默认安装MariaDB而不是MySQL,而且yum服务器上也移除了MySQL相关的软件包。因为MariaDB和MySQL可能会冲突…