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.
    
  • 相关阅读:
    查看端口占用情况lsof,并关闭对应进程kill
    运行django项目出现Invalid HTTP_HOST header: '192.168.1.111:8000'. You may need to add '192.168.1.111' to ALLOWED_HOSTS
    ElasticSearch中如何让query should等同于filter should
    elasticsearch must和should组合查询
    Lua中table和json互转
    Git命令_git cherry pick
    Python17_Linux系统中安装Python3、virtualenv、virtualenvwrapper
    Linux书单推荐
    Linux32_配置vncserver
    Linux31_文件传输相关命令
  • 原文地址:https://www.cnblogs.com/del/p/1581979.html
Copyright © 2011-2022 走看看