Delphi 测试 TStreamWriter、TStreamReader


本文整理自网络,侵删。

 
TStreamWriter 和 TStringWriter 都是继承于抽象类: TTextWriter;
TStreamReader 和 TStringReader 都是继承于抽象类: TTextReader.

它们的功能相似, 不过 TStreamWriter、TStreamReader 又有了 "流" 的特性, 比较适合对字符串流的读写.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const FilePath = 'c:\temp\test.txt';

//貌似是流操作, 其实写入的非字符串类型也都转换成了字符串
procedure TForm1.Button1Click(Sender: TObject);
var
  Writer: TStreamWriter;
  Reader: TStreamReader;
begin
  Writer := TStreamWriter.Create(FilePath);
  Writer.WriteLine('string');
  Writer.WriteLine(123);
  Writer.WriteLine(True);
  Writer.WriteLine(3.14);
  Writer.Close;
  Writer.Free;

  Reader := TStreamReader.Create(FilePath);
  ShowMessage(Reader.ReadToEnd);
  Reader.Close;
  Reader.Free;
end;

//读写时可指定字符编码
procedure TForm1.Button2Click(Sender: TObject);
var
  Writer: TStreamWriter;
  Reader: TStreamReader;
begin
  {参数 2 如果是 True 将会在已有文件的后面添加; False 是新建文件}
  Writer := TStreamWriter.Create(FilePath, False, TEncoding.Unicode);
  Writer.WriteLine('万一的 Delphi 博客');
  Writer.Close;
  Writer.Free;

  Reader := TStreamReader.Create(FilePath, Tencoding.Unicode);
  ShowMessage(Reader.ReadToEnd);
  Reader.Close;
  Reader.Free;
end;

//不指定编码时, 默认的是 UTF8
procedure TForm1.Button3Click(Sender: TObject);
var
  Writer: TStreamWriter;
  Reader: TStreamReader;
begin
  Writer := TStreamWriter.Create(FilePath);
  Writer.Write('万一的 Delphi 博客');
  Writer.Close;
  Writer.Free;

  Reader := TStreamReader.Create(FilePath);
  ShowMessage(Reader.CurrentEncoding.ClassName); {TUTF8Encoding}
  Reader.EndOfStream;
  Reader.Close;
  Reader.Free;
end;

//可基于另一个 TStream 创建; 从 BaseStream 上看它的确就是个流
procedure TForm1.Button4Click(Sender: TObject);
var
  Writer: TStreamWriter;
  Reader: TStreamReader;
begin
  Writer := TStreamWriter.Create(TFileStream.Create(FilePath, fmCreate), TEncoding.UTF8);
  Writer.Write('万一的 Delphi 博客');
  Writer.BaseStream.Free;
  Writer.Close;
  Writer.Free;

  Reader := TStreamReader.Create(TFileStream.Create(FilePath, fmOpenRead), TEncoding.UTF8);
  ShowMessage(Reader.ReadLine); {万一的 Delphi 博客}
  Reader.BaseStream.Free;
  Reader.Close;
  Reader.Free;
end;

end.

来源:https://www.cnblogs.com/del/archive/2009/10/12/1581979.html

相关阅读 >>

Delphi读取文本(一行一行读入)

Delphi如何检测form的移动和调整尺寸事件

Delphi的四舍五入函数

Delphi 使用firedac tfdibbackup和tfdibrestore备份和还原firebird

Delphi 文件夹拷贝子文件及文件夹

Delphi中从windows资源管理器中拖放图片到timage控件上

wmi使用的win32_类库名

Delphi 通过进程名获得文件全路径的函数

Delphi 为数字补充前缀0

Delphi 如何获得其他进程的token

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



打赏

取消

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

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

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

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

评论

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