关于 Delphi 中流的使用 遍历读取流中的所有数据

Posted 每天进步一点点……

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 Delphi 中流的使用 遍历读取流中的所有数据相关的知识,希望对你有一定的参考价值。

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo; 需要添加两个 Memo 用于显示
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

$R *.dfm

//先制造一个测试文件
procedure TForm1.FormCreate(Sender: TObject);
var
  strList: TStringList;
begin
  strList := TStringList.Create;
  strList.Add(\'ABCDEFGHIJKLMNOPQRSTUVWXYZ\');
  strList.SaveToFile(\'c:\\temp\\test.txt\');
  strList.Free;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  ms: TMemoryStream;
  c: Char;
  s1,s2: string;
begin
  ms := TMemoryStream.Create;
  ms.LoadFromFile(\'c:\\temp\\test.txt\'); 读入内存流

  s1 := \'\';
  s2 := \'\';
  ms.Position := 0;                       指针到开始
  while ms.Position < ms.Size do          循环读出; 应该写作 while ms.Read(c,1) > 0 do 
  begin
    ms.Read(c,1);                         每读出一个字节, 指针会自动移到新的位置
    s1 := s1 + c + \' \';                   用文本记录
    s2 := s2 + IntToHex(Byte(c),2) + \' \'; 用两位数的十六进制记录
  end;

  Memo1.Lines.Text := s1;
  Memo2.Lines.Text := s2;

  Memo1 会显示: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
  Memo2 会显示: 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 0D 0A
  ms.Free;
end;

end.

关于 Delphi 中流的使用 用 TFileStream(文件流) 读写

TStream 是一个抽象的基类, 不能直接生成对象. 在具体的应用中, 主要使用它的子孙类:
TFileStream: 文件流
TStringStream: 字符串流
TMemoryStream: 内存流
TResourceStream: 资源文件流

THandleStream: 是 TFileStream 的父类、TStream 的子类
TCustomMemoryStream: 是 TMemoryStream 和 TResourceStream 的父类、TStream 的子类

与流相关的常用类还有: TReader、TWriter、TCompressionStream、TDecompressionStream

来一个文件流的例子:


 

procedure TForm1.Button1Click(Sender: TObject);
var
  getStream,setStream: TFileStream; {声明一个文件流}
  getPath,setPath: string;
begin
  getPath := ‘c:\temp\get.jpg‘; {需要这个文件存在}
  setPath := ‘c:\temp\set.jpg‘; {这个会自动建立}
  if not FileExists(getPath) then
  begin
    ShowMessage(‘找不到我们要测试的图片文件: ‘ + getPath);
    Exit;
  end;

  getStream := TFileStream.Create(getPath, fmOpenRead or fmShareExclusive);
  setStream := TFileStream.Create(setPath, fmCreate);
  {建立文件流需要两个参数: 参数 1 是路径, 参数 2 是打开模式}

  getStream.Position := 0; {流指针移到开始, 复制时从这里开始}
  setStream.CopyFrom(getStream, getStream.Size); {Copy 流}
  {CopyFrom 的参数 2 是要复制的内容大小; 如果为 0 , 不管指针在什么位置都会复制所有内容}
  {CopyFrom 返回实际拷贝的字节数}

  {这时硬盘上就有 set.jpg 文件, 与 get.jpg 一么一样}
  {其实就是复制文件, 不过这里我们是用文件流实现的}

  getStream.Free;
  setStream.Free;
end;

TFileStream 打开模式与共享模式:

分类参数说明



fmCreate  建立文件, 如果存在则打开它。
fmOpenRead 只读打开
fmOpenWrite 只写打开
fmOpenReadWrite 读写打开



fmShareCompat 共享模式, 兼容 Dos
fmShareExclusive  不允许别人以任何方式打开
fmShareDenyWrite  允许别人以只写方式打开
fmShareDenyRead 允许别人以只读方式打开
fmShareDenyNone 允许别人以任何方式打开

以上是关于关于 Delphi 中流的使用 遍历读取流中的所有数据的主要内容,如果未能解决你的问题,请参考以下文章

关于 Delphi 中流的使用 用 TFileStream(文件流) 读写

关于 Delphi 中流的使用 用流读写结构化文件

delphi 2010 的打印报表fastreport怎么读取流中的内容并显示出来最好有代码例子

Delphi中文件流的使用方法

delphi中,如何读取一个目录中的所有文件?在线等……

delphi treeview控件读取INI文件。