查看: 284|回复: 3
打印 上一主题 下一主题

通过内存流读取文件

[复制链接] qrcode

32

主题

39

帖子

114

积分

注册会员

Rank: 2

积分
114
楼主
跳转到指定楼层
发表于 2016-2-29 09:42 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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.
回复

使用道具 举报

1

主题

87

帖子

25

积分

新手上路

Rank: 1

积分
25
沙发
发表于 2016-2-29 09:43 PM | 只看该作者
楼主辛苦……感谢分享……
回复 支持 反对

使用道具 举报

0

主题

89

帖子

18

积分

新手上路

Rank: 1

积分
18
板凳
发表于 2016-2-29 09:44 PM | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

0

主题

93

帖子

60

积分

注册会员

Rank: 2

积分
60
地板
发表于 2016-2-29 09:46 PM | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表