MemoryStream使用

unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;



type

  TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Memo1: TMemo;

    Button4: TButton;

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}



var

  mStream: TMemoryStream;



procedure TForm1.FormCreate(Sender: TObject);

{程序开始先创建一个准备要测试的文件}

var

  strList: TStringList;

begin

  strList := TStringList.Create;

  strList.Add('aaaaaaaa');

  strList.Add('bbbbbbbb');

  strList.Add('cccccccc');

  strList.Add('dddddddd');

  strList.SaveToFile('F:\test.txt');

  strList.Free;



  {同时建立内存流}

  mStream := TMemoryStream.Create;

end;



procedure TForm1.Button1Click(Sender: TObject);

//通过流读文件到 Memo

begin

  mStream.LoadFromFile('F:\test.txt'); {把文件读入内存流}

  Memo1.Lines.LoadFromStream(mStream);      {把内存流载入 Memo1}

end;





procedure TForm1.Button2Click(Sender: TObject);

//用字符指针读取流中的内容

var

  pc: PChar;

begin

  pc := mStream.Memory; {把字符指针指向内存流}

  ShowMessage(pc[0]);   {a; 第一个字符}

  ShowMessage(pc[10]);  {b; 这个第二行的第一个字符; 每行8个字再加换行与回车共10个字符}

  ShowMessage(pc[20]);  {c}

  ShowMessage(pc[30]);  {d}

end;





procedure TForm1.Button3Click(Sender: TObject);

//从流读入到缓冲区

var

  buffer: array[0..2] of Char; {定义个字符缓冲区}

begin

  mStream.Seek(0, soFromBeginning);

  mStream.Read(buffer, SizeOf(buffer));

  ShowMessage(buffer); {aaa}



  mStream.Seek(10, soFromBeginning);

  mStream.Read(buffer, SizeOf(buffer));

  ShowMessage(buffer); {bbb}



  mStream.Seek(20, soFromBeginning);

  mStream.Read(buffer, SizeOf(buffer));

  ShowMessage(buffer); {ccc}



  mStream.Seek(30, soFromBeginning);

  mStream.Read(buffer, SizeOf(buffer));

  ShowMessage(buffer); {ddd}



{关于 Seek 函数:

  参数1: Offset 是偏移量;

  参数2: Origin 是指针的基准位置, 有三个选值: soFromBeginning、soFromCurrent、soFromEnd

         soFromBeginning: 以开始为基准, 此时参数 Offset 要 >= 0;

         soFromCurrent: 以当前位置为基准;

         soFromEnd: 以结束为基准; 此时参数 Offset 要 <= 0;

  返回: 指针新位置

}

end;





procedure TForm1.FormDestroy(Sender: TObject);

begin

  mStream.Free;

end;



procedure TForm1.Button4Click(Sender: TObject);

var

  buf:Char;

begin

  {aaaaaaaa #13,#10 bbbbbbbb #13,#10 cccccccc #13,#10 dddddddd #13#10}

  mStream.Seek(8,soFromBeginning);

  mStream.Read(buf,SizeOf(buf));

  ShowMessage(IntToStr(ord(buf)));  {13}



  mStream.Seek(9,soFromBeginning);

  mStream.Read(buf,SizeOf(buf));

  ShowMessage(IntToStr(ord(buf)));  {10}



  ShowMessage(IntToStr(mStream.Size)); {40}

end;



end.

 

你可能感兴趣的:(Stream)