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.

相关阅读 >>

wmi远程访问问题解决方法

Delphi xe 遍历指定数据库,清空各表记录

Delphi 如何检查字符串是否为数字

Delphi webbrowser 加载html 将html代码转换成网页

Delphi静态和动态调用dll的实例

idhttp访问网页出现socket error #10054错误

Delphi内嵌汇编语言basm精要

Delphi 将文件转换成base64编码

Delphi 15位身份证号码转18位身份证号码

Delphi 无法调用cmd nbtstat命令解决办法

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...