C#压缩和Delphi解压缩

C#压缩和Delphi解压缩,delphi,zlib,deflatestream,Delphi,Zlib,Deflatestream,我有一些使用C#DeflateStream类压缩的文件,如下所示: using (DeflateStream compressionStream = new DeflateStream(compressedFileStream, CompressionMode.Compress)) 没什么特别的,都是默认值。它使用等效的C#DeflateStreamCode(即 using (DeflateStream decompressionStream = new DeflateStream(origi

我有一些使用C#DeflateStream类压缩的文件,如下所示:

using (DeflateStream compressionStream = new DeflateStream(compressedFileStream, CompressionMode.Compress))
没什么特别的,都是默认值。它使用等效的C#DeflateStreamCode(即

using (DeflateStream decompressionStream = new DeflateStream(originalFileStream, CompressionMode.Decompress))
但是我需要用Delphi解压这个。我尝试了zlib库(XE8、XE10.3),大致如下:

InStream := TMemoryStream.Create;
InStream.LoadFromFile('F:\mycompressedfile.x');
DecompressionStream := TDecompressionStream.Create(InStream);
OutStream := TMemoryStream.Create;
OutStream.LoadFromStream(DecompressionStream);
OutStream.SaveToFile('F:\mydecompressedfile.x');

但不断收到“数据错误”消息。如何解压缩C#DeflateStream压缩文件?

显然,Delphi deflate算法的默认设置需要zlib头,而C#deflate代码创建“原始”压缩流。通过这种方式设置解压流(WindowBits的-ve值)允许Delphi解压C#压缩数据

DecompressionStream := TZDecompressionStream.Create(FBlobStream, -15);
据这位官员说:

WindowBits参数确定缓冲区处理。零表示用于确定缓冲区大小的zlib头。8到15之间的值设置缓冲区大小,负值表示原始处理,加上16将强制gzip处理


显然,Delphi deflate算法的默认设置需要zlib头,而C#deflate代码创建“原始”压缩流。通过这种方式设置解压流(WindowBits的-ve值)允许Delphi解压C#压缩数据

DecompressionStream := TZDecompressionStream.Create(FBlobStream, -15);
据这位官员说:

WindowBits参数确定缓冲区处理。零表示用于确定缓冲区大小的zlib头。8到15之间的值设置缓冲区大小,负值表示原始处理,加上16将强制gzip处理


您是否尝试过Embarcadero文档中的代码?首先尝试使用标准的zip文件。另外,您是否尝试使用WinZip或Windows内置zip处理来解压缩使用C#创建的文件?我尝试过,如果使用Delphi进行压缩和解压缩,效果很好,但不使用C#压缩文件。如果使用C#压缩文件,可以使用Windows内置zip文件处理(仅使用资源管理器)来解压缩吗?只是为了验证你的C#代码所做的压缩是标准的。你应该在这里为你自己的问题写一个答案,而不是把答案放在问题中。我已经回滚了你的编辑。在这里编辑问题的解决方案是不合适的。如果你已经找到了解决方案,你可以在下面的空白处以答案的形式写下来。有关更多信息,请参阅。您是否尝试过Embarcadero文档中的代码?首先尝试使用标准的zip文件。另外,您是否尝试使用WinZip或Windows内置zip处理来解压缩使用C#创建的文件?我尝试过,如果使用Delphi进行压缩和解压缩,效果很好,但不使用C#压缩文件。如果使用C#压缩文件,可以使用Windows内置zip文件处理(仅使用资源管理器)来解压缩吗?只是为了验证你的C#代码所做的压缩是标准的。你应该在这里为你自己的问题写一个答案,而不是把答案放在问题中。我已经回滚了你的编辑。在这里编辑问题的解决方案是不合适的。如果你已经找到了解决方案,你可以在下面的空白处以答案的形式写下来。有关更多信息,请参阅。