【问题标题】:Error ' Invalid ZStream operation ' Delphi 11.0错误'无效的 ZStream 操作'Delphi 11.0
【发布时间】:2021-12-06 08:30:53
【问题描述】:

我最近迁移到 Delphi 11.0 这一行 'Zip.CopyFrom(Source, 0);生成'错误'无效的ZStream操作'

uses system.ZLib;
...

    const
      ZLIB_GZIP_WINDOWBITS    = 31;
      ZLIB_DEFLATE_WINDOWBITS = 15;
    
    type
      TZLibCompressionLevel = TZCompressionLevel;

procedure ZLibCompressStream(Source, Dest: TStream; const Level: TZLibCompressionLevel;
        const GZipFormat: Boolean);
    var
      WindowBits: Integer;
      Zip: TZCompressionStream;
    begin
      if GZipFormat then
        WindowBits := ZLIB_GZIP_WINDOWBITS
      else
        WindowBits := ZLIB_DEFLATE_WINDOWBITS;
    
      Zip := TZCompressionStream.Create(Dest, Level, WindowBits);
      try
        Zip.CopyFrom(Source, 0);
      finally
        FreeAndNil(Zip);
      end;
    end;
    
    procedure TForm85.Button1Click(Sender: TObject);
    var s1,s2:TMemoryStream;
    begin
     s1:=TMemoryStream.Create;
     s1.LoadFromFile('h:\1.txt') ;
     s2:=TMemoryStream.Create;
     ZLibCompressStream(s1,s2,zcDefault,true);
    
    end;

在 Delphi 10 上和没有错误发生之前

【问题讨论】:

  • 我们可以假设1.txt 实际上的大小大于零吗?如果您查看https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.Classes.TStream.CopyFrom,您会注意到 Embarcadero 可能已经更改了其中的代码。去看看有什么区别。同样在示例中; https://docwiki.embarcadero.com/CodeExamples/Alexandria/en/ZLibCompressDecompress_(Delphi) 压缩部分在CopyFrom 中有一个计数。它以前可能与 0 一起使用,但新的更改可能不会
  • 我的文件大小是 5k 并使用其他文件大小和格式进行测试,但结果没有发生变化。我编译了这个例子
  • 使用 Embarcadero® Delphi 11.0 版本 28.0.42600.6491 并出现相同的错误“无效的 ZStream 操作”Tstream.Copyfrom 与 tmemorystream 一起正常工作,但对于 TZcompressionStream 上升错误。我再次提到,此代码在 Delphi 10.2 上编译没有任何问题,基于 embarcadero 注释“在版本 11 中,该方法已经过优化,现在可以在大计数的情况下获得更好的性能。”由于 embarcadero 工作人员未针对 TZcompressionStream 测试此优化例程,因此需要发布新版本
  • 值得注意的是,在Delphi 10和Delphi 11上输出TZcompressionStream的结果是正确的,可以解压没有任何错误
  • 同样更新Delphi到1.November解决不了这个错误,问题存在。

标签: delphi


【解决方案1】:

它似乎已在 11.1 中修复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多