zoukankan      html  css  js  c++  java
  • 测试 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.
    
  • 相关阅读:
    WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[实现篇]
    事件(Event),绝大多数内存泄漏(Memory Leak)的元凶[上篇]
    谈谈关于MVP模式中VP交互问题
    如何通过VPC在本机搭建局域网
    谈谈分布式事务之三: System.Transactions事务详解[下篇]
    WCF版的PetShop之二:模块中的层次划分[提供源代码下载]
    实践重于理论——创建一个监控程序探测WCF的并发处理机制
    WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[WS标准篇]
    WCF技术剖析之三十一: WCF事务编程[中篇]
    微软将结束对Windows 2000、XP和Vista部份版本的技术支持
  • 原文地址:https://www.cnblogs.com/del/p/1581979.html
Copyright © 2011-2022 走看看