测试 TStreamWriter、TStreamReader

本文介绍使用Delphi中的TStreamWriter和TStreamReader进行文本文件的读写操作,演示了不同编码方式的应用,并展示了如何基于TStream实现文件读写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值