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:temptest.txt\');
strList.Free;
{同时建立内存流} mStream := TMemoryStream.Create; end; procedure TForm1.Button1Click(Sender: TObject); //通过流读文件到 Memo begin mStream.LoadFromFile(\'c:temptest.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.
|