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.
    
  • 相关阅读:
    如何选择机器学习算法 转
    机器学习经典算法详解及Python实现--基于SMO的SVM分类器
    机器学习(Machine Learning)&深度学习(Deep Learning)资料
    计算智能在设备状态维护中的应用
    LaTeX 在编译时出现 File ended while scanning use of @writefile错误
    LaTeX 中插入图片使其紧跟插入的文字之后
    LaTeX 制作表格
    LaTeX 中换段落
    LaTeX 中使用三级标题
    使用 WinEdt 来写中文文章or 建模论文
  • 原文地址:https://www.cnblogs.com/del/p/1581979.html
Copyright © 2011-2022 走看看