【问题标题】:I keep getting a read error when copying stream data复制流数据时不断收到读取错误
【发布时间】:2019-08-10 17:25:41
【问题描述】:

我正在尝试使用CopyFrom 方法将数据从包含在TStreamReader 中的TStringStream 复制到另一个TStringStream。如果没有读取源流,它会像宣传的那样工作,但是如果我对流读取器执行单次读取,它会抛出 EReadError 异常:流读取错误。显示问题的代码:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.classes;

var
  FStreamRead : TStreamReader;
  AChar : char;
  OutStream : TStringStream;

begin
  FStreamRead := TStreamReader.Create(TStringStream.Create('This is test data',TEncoding.UTF8));
  FStreamRead.OwnStream;
  try
    try
      // read once
      Achar := char (FStreamRead.Read);
      OutStream := TStringStream.Create;
      try
        OutStream.CopyFrom(FStreamRead.BaseStream,4);
      finally
        OutStream.Free;
      end;
    except
      on E: Exception do
        Writeln(E.ClassName, ': ', E.Message);
    end;
  finally
    FStreamRead.Free;
    readln;
  end;
end.

注释掉一行:

Achar := char (FStreamRead.Read);

允许无错误地完成复制。文档指出,如果 TStream.CopyFrom 方法中的计数大于零,它将从输入流中的当前位置执行复制,这是我需要实现的。

【问题讨论】:

    标签: delphi stream


    【解决方案1】:

    TStreamReader 在内部使用缓冲。你根本不允许在外面使用BaseStream

    【讨论】:

    • 谢谢,以后还得做很长的路要走。
    猜你喜欢
    • 2021-06-06
    • 2016-02-03
    • 2018-04-12
    • 2019-04-27
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2013-08-10
    相关资源
    最近更新 更多