Delphi对文件流的操作

转载 2014年12月20日 22:48:55
在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,实际应用中用的次数也非常频繁。它叫内存流,就是说在内存中建立一个流对象。它的基本方法和函数跟上面是一样的。


写流:
如果把文本框中的字符串写入流中,最好使用字符指针Pchar.例如:
var
pstr:Pchar;
mestr:string;
FS:TFilestream;
begin
FS:=TFileStream.Create((Extractfilepath(Application.ExeName)+'123.txt'),fmCreate );
mestr:=edit1.text;
pstr:=Pchar(mestr);//把字符串转成字符指针
FS.Writebuffer(pstr^,Length(pstr));//把字符串写入流中


读流
流的读取比写入要困难一些,下面谈读流的几个注意点:
1.如果是字符串的读取,最好也使用字符指针Pchar
2.要给字符指针申请内存用GetMem
3.要把字针转成字符型,直接付值就行
4.要限定字符串长度,用SetLength,这条是很关键的
5.要释放内存用FreeMem
var
pstr:Pchar;
mestr:string;
FS:TFilestream;
meint:integer;
begin
FS:=TFileStream.Create((Extractfilepath(Application.ExeName)+'123.txt'),fmOpenRead );
getmem(pstr,meint);//申请字符指针内存
fs.Readbuffer(pstr^,meint);//在流里读出meint大小的字符串到字符指针
mestr:=pstr;//字符指针转成字符
SetLength(mestr,meint);//限定字符大小
freemem(Pstr);//释放内存
FS.Free;//释放流
end;

delphi文件操作

Delphi中默认有input和output两个文件变量,使用可以不用定义,直接使用.   但: input:只读、output:只写。用时注意以免引起异常.        文件是由文件名标识的一...
  • Trassion
  • Trassion
  • 2016年01月21日 11:29
  • 1207

Delphi压缩流和解压流的应用

软件开发者不免都要遇到压缩数据的问题!经常使用Delphi的朋友都知道,它为我们提供了两个流类(TCompressionStream和TDecompressionStream)来完成数据的压缩和解压缩...
  • mpg2012
  • mpg2012
  • 2013年09月09日 09:57
  • 2060

delphi 怎么将一个流转换成字符串?或者将字符串转出一个流

(*// 标题:充分利用pascal字符串类型 说明:和PChar不同,string可以保存#0字符在其中;示例文件、内存流字符串之间转换 设计:Zswang 日期:2002-...
  • wozengcong
  • wozengcong
  • 2016年02月27日 14:42
  • 1048

C# 文件流的操作

在我们编写程序的时候经常会用到文件流的操作,这里作为一种便签的方式记录下,方便日后查找。 一.文件流 /* 写文件流,方式1 FileStream fst = new FileStream("tes...
  • wsliulian
  • wsliulian
  • 2016年11月30日 17:52
  • 1219

c#基础语言编程-文件流操作

引言在System.IO 命名空间下提供了一系列的类,我们可以通过相应的类进行文件、目录、数据流的操作。 1、File类:提供用于创建、复制、删除、移动和打开文件的静态方法。File类 2、Fil...
  • poiiy333
  • poiiy333
  • 2015年03月25日 16:36
  • 795

Delphi如何从内存流中判断图片格式,MemoryStream

图片的格式很多,一个图片文件的后缀名并不能说明这个图片的真正格式什么,那么如何获取图片的格式呢?我想到了几个简单但有效的方法,那就是读取图片文件的文件头标识。我们知道各种格式的图片的文件头标识识不同的...
  • a137268431
  • a137268431
  • 2015年08月20日 17:46
  • 1175

Java 文件操作基础之流操作

Java编程语言中,想对文件进行操作,必须先对其封装的流操作类型有一定的了解。 对于计算机中的文件和目录,Java封装了一个File类。此类中定义了一些对文件及目录操作的常用方法,说明如下: ...
  • chris_mao
  • chris_mao
  • 2015年04月21日 13:14
  • 878

Delphi对ini文件的操作

一、INI文件的结构: ; 注释 [小节名] 关键字=值 INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值。  值的类型有三种:字符串、整型数值和布尔值。...
  • zang141588761
  • zang141588761
  • 2016年06月01日 17:08
  • 1165

delphi txt 文件操作

1 文件类型和标准过程        Delphi同Object Pascal一样支持三种文件类型,即:文本文件、记录文件、无类型文件。 1.1文本文件         ...
  • u011429664
  • u011429664
  • 2013年08月20日 13:38
  • 1490

Delphi 快速读取TXT 指定行的数据

继上次的问题。在提取了大量的Email 数据后。现在读取数据成了一个问题。今天我取过1~100w的数据。明天我要取100w~200w的数据。在不用数据库的情况下,我搞了一个下午。Delphi Tstr...
  • MichaelJScofield
  • MichaelJScofield
  • 2014年12月11日 17:48
  • 5714
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi对文件流的操作
举报原因:
原因补充:

(最多只允许输入30个字)