当前位置:编程学习 > Delphi >>

如何使用Delphi中的流的使用 (第三卷)

通过内存流读取文件

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. 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,