delphi的TFileStream 内存流

一、文件

文本文件是以行为单位进行读、写操作的。文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。

二、定义

FileStream: TFileStream;

三、打开文件

Filestream:= TFileStream.Create(AFileName: string; Mode: Word);

参数AfileName:文件名;参数Mode:文件打开的方式。

Mode由打开模式与共享模式组成,取值见下表:


分类


参数


说明



fmCreate


建立文件, 如果指定文件名的文件已经存在,则以写模式打开


fmOpenRead


只读打开


fmOpenWrite


以写模式打开文件,写到文件的内容将替换文件以前的内容


fmOpenReadWrite


读写打开



fmShareCompat


共享模式, 兼容 Dos


fmShareExclusive


他的应用程序不能打开该文件


fmShareDenyWrite


其他的应用程序只能以只写方式打开


fmShareDenyRead


其他的应用程序只能以只读方式打开


fmShareDenyNone


其他的应用程序可以以任何方式打开文件

四、读写文件

function read(var buffer;count:longint):longint; //从文件流当前位置读count字节到缓冲区BUFFER;

function write(const buffer;count:longint):longint; //将缓冲区BUFFER的Count个字节的数据写到文件流当前位置中,覆盖该位置后面的Count个字节的数据;

function seek(offset:longint;origin:word):longint; //设置文件流当前读写指针位置,origin={soFromBeginning,soFromCurrent,soFromEnd}

function copyfrom(source:TStream;count:longint):longint; //从另一文件流中当前位置复制COUNT到当前文件流当前位置;

  

八、关闭文件

文件的关闭须调用FreeAndNil(FileStream)。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

一个实例

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

type

TBuffer = array [0..16000]of char

procedure GetMessageFromDir( AFileName: string; var ABuffer: TBuffer);

var

     FileStream: TFileStream;

begin

       Filestream:=TFileStream.Create(AFileName,fmShareExclusive);

       Filestream.Position:=0;

       FileStream.Read(ABuffer,sizeof(ABuffer));

     FreeAndNil(FileStream);

end;

procedure PutMessageToDir(AFileName:string; Astr :string);

var

     FileStream: TFileStream;

     tempBuffer:TBuffer;

begin

     StrPcopy(tempBuffer,Astr);

     Filestream:=TFileStream.Create(AFileName,fmShareExclusive or fmCreate);

     FileStream.Position:=0;

     FileStream.Write(tempBuffer,length(AStr));

     FreeAndNil(FileStream);

end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

一个实例

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure TForm1.Button1Click(Sender: TObject);

var

  getStream,setStream: TFileStream; {声明一个文件流}

  getPath,setPath: string;

begin

  getPath := ‘c:\temp\get.jpg‘; {这个文件存在}

  setPath := ‘c:\temp\set.jpg‘; {这个会自动建立}

  getStream := TFileStream.Create(getPath, fmOpenRead or fmShareExclusive);

  setStream := TFileStream.Create(setPath, fmCreate);

  getStream.Position := 0; {流指针移到开始, 复制时从这里开始}

  setStream.CopyFrom(getStream, getStream.Size); {Copy 流}

  {CopyFrom 的第二个参数是要复制的内容大小; 如果为 0 , 不管指针在什么位置都会复制所有内容}

  getStream.Free;

  setStream.Free;

end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

一个实例:读取流中的图片数据,显示图片

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

type

  TForm1 = class(TForm)

    img1: TImage;

    procedure FormShow(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

    fstream:TFileStream;

  end;

var

  Form1: TForm1;

  filename:string = ‘.\WeiMir.uib‘;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);

var

bmp:Tbitmap;

begin

  fstream:=Tfilestream.create(filename,fmOpenRead);

  fstream.Seek(0,soFromBeginning);

  bmp:=TBitmap.Create;

  bmp.LoadFromStream(fstream);

  img1.Picture.Bitmap:=bmp;

end; 

end.

  

时间: 2024-10-11 06:26:22

delphi的TFileStream 内存流的相关文章

用内存流 文件流 资源生成客户端(Delphi开源)

正文:很多木马生成器就是用的内存流和文件流生成客户端的,废话不多说了,代码如下: unit Main; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Inifiles; typeTForm1 = class(TForm)GroupBox1: TGroupBox;msgtitle: TEdit;GroupBox2: TGroupBo

关于 Delphi 中流的使用(2) 用 TFileStream(文件流) 读写

TStream 是一个抽象的基类, 不能直接生成对象. 在具体的应用中, 主要使用它的子孙类:TFileStream: 文件流TStringStream: 字符串流TMemoryStream: 内存流TResourceStream: 资源文件流 THandleStream: 是 TFileStream 的父类.TStream 的子类TCustomMemoryStream: 是 TMemoryStream 和 TResourceStream 的父类.TStream 的子类 与流相关的常用类还有:

关于 Delphi 中流的使用(1) 用 TMemoryStream(内存流) 入门 &&& 关于指针的迷惑,我自己问的.

来自:http://www.cnblogs.com/del/archive/2008/01/01/1022124.html -------------------------------------------------------------------------------------------- 前言: 所谓"流", 就是一段数据或是一块内存;在进行流操作时, 我们不必关心流中的数据到底是什么; 只需要知道流的大小和当前的指针位置. 所以流只有两个属性: Size.Posi

delphi 基础之三 文件流操作

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

日志记录.01_内存流操作

日志记录,我们一般通过本地文本文件进行记录,对于使用的文件后缀名,一般为比较形象的 .log ,当然也可以是其它任何自定义的格式, 如: .abc,  .xyz 本次随笔主要描述的是借用内在存流来处理日志记录 TMemoryStream; 01. 日志记录,我们无创建一个用于记录的文件. 使用函数 FileCreate(文件路径), 可以是绝对路径,也可以是相对路径 ♦ 注意一点:  FileCreate 函数会覆盖原有的内容; 而且还不会进行提示; ♦ 在实际使用过程中,最好通过 FileEx

Java核心类库-IO-字节数组流/内存流

内存流(数组流): 把数据先临时存在数组中,待会再从数组中获取出来. 1. 字节内存流:ByteArrayInputStream/ByteArrayOutputStream 2. 字符内存流:CharArrayInputStream/CharArrayOutputStream 3. 字符串流:StringReader/StringWriter(把数据存放在数组中) 字节内存流: public class ByteArrayDemo { public static void main(java.l

UNIX高级环境编程(7)标准IO函数库 - 二进制文件IO,流定位,创建临时文件和内存流

? 1 二进制IO(Binary IO) 在前一篇我们了解了逐字符读写和逐行读写函数. 如果我们在读写二进制文件,希望以此读写整个文件内容,这两个函数虽然可以实现,但是明显会很麻烦且多次循环明显效率很低. 为了应对这种场景,标准IO库提供了fread和fwrite函数. 函数声明: #include <stdio.h> size_t fread(void *restrict ptr, size_t size, size_t nobj, FILE *restrict fp); size_t fw

Xilinx VDMA 24位流输出与32位AXI总线的内存 流数据关系

测试方法采用了VDMA仅有MM2S通道, 内存中的图像帧是用MicroBlaze核写入的一个colorbar. VDMA的mhs部分如下, 因为我的输出用了Digilent的HDMI核,而这个HDMI核是32位的,我自己写了个axis_24_32的位宽转换的ip,这个暂且按下不表. BEGIN axi_vdma PARAMETER INSTANCE = axi_vdma_0 PARAMETER HW_VER = 5.04.a PARAMETER C_USE_FSYNC = 0 PARAMETER

Mybatis拦截器 mysql load data local 内存流处理

Mybatis 拦截器不做解释了,用过的基本都知道,这里用load data local主要是应对大批量数据的处理,提高性能,也支持事务回滚,且不影响其他的DML操作,当然这个操作不要涉及到当前所load的数据,其中在使用的时候一定要local , 这个命令使用是mysql规定的,否则不加则会认为是服务器本地的文件.这里主要是以流的方式来做处理,这样可以使用内存流,这样就可以避免在某些时候需要生成文件才能导入的多余操作,和IO性能消耗.也可以是应用本地的文件. 注:该做法只试用于存入数据的表,不