首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于 Delphi 中游的使用(3) 通过内存流读取文件

2012-12-26 
关于 Delphi 中流的使用(3) 通过内存流读取文件unit Unit1interfaceuses? Windows, Messages, SysUtils,

关于 Delphi 中流的使用(3) 通过内存流读取文件

unit Unit1;

interface

uses
? Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
? Dialogs, StdCtrls;

type
? TForm1 = class(TForm)
??? Memo1: TMemo;
??? Button1: TButton;
??? Button2: TButton;
??? Button3: TButton;
??? procedure FormCreate(Sender: TObject);
??? procedure FormDestroy(Sender: TObject);
??? procedure Button1Click(Sender: TObject);
??? procedure Button2Click(Sender: TObject);
??? procedure Button3Click(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('c:\temp\test.txt');
? strList.Free;

? {同时建立内存流}
? mStream := TMemoryStream.Create;
end;


procedure TForm1.Button1Click(Sender: TObject);
//通过流读文件到 Memo
begin
? mStream.LoadFromFile('c:\temp\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;

end.

热点排行