DELPHI关于文件流

原创 2006年05月26日 10:56:00
在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文件流

var FLoadsteam: TFileStream; FcopySteam: TFileStream; buffer: array[0..1023] of char; begin ...
  • hutao1101175783
  • hutao1101175783
  • 2013年11月02日 02:55
  • 581

DELPHI关于文件流

====================================================== 注:本文源代码点此下载 =============================...
  • javazhuanzai
  • javazhuanzai
  • 2012年01月16日 04:11
  • 221

Delphi 流文件操作TStream类

数据流是面向对象程序设计语言中面向对象思想的典型体现,它彻底地取代了早期的利用函数实现输入输出的功能,克服了用函数实现输入输出功能的诸多弊端。简单来说,流就是建立在面向对象基础上的一种抽象的处理数据的...
  • beyondqd
  • beyondqd
  • 2011年08月26日 16:11
  • 4475

delphi 中使用文件流

result:=''; if Trim(txt)='' then exit; txtList:=TStringList.Create; srcList:=TStringList....
  • PenGHNet
  • PenGHNet
  • 2011年04月27日 10:42
  • 476

DELPHI文件流

在Delphi中,所有流对象的基类为TStream类,其中定义了所有流的共同属性和方法。 正在装载数据…… TStream类中定义的属性介绍如下: 1、Size: 此属性以字节返回流中数据大小。 2、...
  • wang463584281
  • wang463584281
  • 2014年03月18日 15:44
  • 497

Delphi编程将数据库数据用流快速导入Excel

      在开发数据库应用程序中, 经常要将类型相同的数据导出来,放到Excel文件中,利用Excel强大的编辑功能,对数据作进一步的加工处理。这有许多的方法,我们可以使用OLE技 术,在Delp...
  • lee576
  • lee576
  • 2008年02月22日 11:06
  • 1684

C++文件流与vector容器的简单使用

#include #include #include using namespace std; int main() { vector v1; int i = 0; for (i ...
  • New_new_zero
  • New_new_zero
  • 2018年01月12日 11:56
  • 25

Delphi文件流内存流操作心得

1.  经过实践发现,先把文件流TFileStream独到TMemoryStream中,速度要快一点。如果一边MemoryStream读一边写MemoryStream,例如我用需要加密解密一个文件,不...
  • newweapon
  • newweapon
  • 2008年07月31日 11:34
  • 1559

c++进阶---IO类详解(二)--文件流的详解

前言在上一篇博客,我们已经主要介绍了IO类是什么和对标准输入流cin做了比较详细的介绍,这篇博客我们就来开始学习另外一类IO类:ifstream 、oftream、fstream。我们称之为文件流,主...
  • qq_35644234
  • qq_35644234
  • 2017年03月05日 21:21
  • 757

DATASNAP文件传输

在datasnap服务器里面定义了方法: procedure UpdateDoc(ItemID : integer; doc : TStream); 客户端   AServerMethods_...
  • yeeonefx
  • yeeonefx
  • 2012年12月10日 10:25
  • 1908
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DELPHI关于文件流
举报原因:
原因补充:

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