C# 用c语言打开delphizlib压缩数据#

C# 用c语言打开delphizlib压缩数据#,c#,delphi,stream,zlib,C#,Delphi,Stream,Zlib,我有很多用Delphi编写的应用程序生成的文件,我想在C#应用程序中打开这些文件。我现在正在写作 解压文件的“旧”Delphi代码是: InputStream := TFileStream.Create(InputFileName, fmOpenRead); OutputStream := TMemoryObjStream.Create; DecompressionStream := TZDecompressionStream.Create(InputStream); OutputStream.

我有很多用Delphi编写的应用程序生成的文件,我想在C#应用程序中打开这些文件。我现在正在写作

解压文件的“旧”Delphi代码是:

InputStream := TFileStream.Create(InputFileName, fmOpenRead);
OutputStream := TMemoryObjStream.Create;
DecompressionStream := TZDecompressionStream.Create(InputStream);
OutputStream.CopyFrom(DecompressionStream, 0);
这是我用来在c#中打开这些文件的代码:

如果我现在开始用二进制读取器读取“MS流” 我在前24个字节中得到了一些奇怪的数据,然后我得到了似乎符合逻辑的值。
首先,它应该读取一个Int32,它确实如此,并且具有一个合理的值。 在输入一个字符串之后,该字符串将显示为“\0\0\0ISua”,其中应显示“ISuarez”。但是,如果我将流位置再移动一个字节,就会得到“Suarez\n\0\0\0”

这让我想知道我是否可以稍后开始读取流中的一些位而不是字节,但是如何做到这一点呢?

嗨,我们遇到了类似的问题。Zlib不是.Net中的Zlib。我们发现超过10个lib,上面有“zlib”标签,但不能像delphi那样进行压缩/解压缩

我们开始在1.0.4.0版中使用nuget包“zlib.net”。
这对我们很有效。

嗨,我们也遇到了类似的问题。Zlib不是.Net中的Zlib。我们发现超过10个lib,上面有“zlib”标签,但不能像delphi那样进行压缩/解压缩

我们开始在1.0.4.0版中使用nuget包“zlib.net”。
这对我们很有用。

真正的问题是什么在压缩数据,您没有显示,但是:


我有一个场景,我在用Delphi压缩数据,需要用C#读取数据。跳过前两个字节很简单,因为Delphi中的zlib库在头中使用了C#中的Deflate例程没有使用的两个字节。

真正的问题是什么在压缩数据,您没有显示,但是:


我有一个场景,我在用Delphi压缩数据,需要用C#读取数据。跳过前两个字节很简单,因为Delphi中的zlib库在头中使用了C#中的Deflate例程没有使用的两个字节。

我将这个问题搁置了一段时间,最近又尝试解决它,并发现了问题所在:

Delphi为字符串长度编写一个32位整数,后跟字符

另一方面,.Net中的Binaryreader.Readstring读取一个字节并将其乘以7以获得字符串的长度,这说明为什么我的前3个字符中包含空字符“0”

所以我写了我自己的stringreader:

enter code here
        private String ReadString(System.IO.BinaryReader BR)
    {
        Int32 StringLength = BR.ReadInt32();
        Char[] Chars = BR.ReadChars(StringLength);
        return new String(Chars);
    }
这个很好用


致以最良好的祝愿

我把这个问题搁置了一段时间,最近又做了一次尝试来解决它,并找出了问题所在:

Delphi为字符串长度编写一个32位整数,后跟字符

另一方面,.Net中的Binaryreader.Readstring读取一个字节并将其乘以7以获得字符串的长度,这说明为什么我的前3个字符中包含空字符“0”

所以我写了我自己的stringreader:

enter code here
        private String ReadString(System.IO.BinaryReader BR)
    {
        Int32 StringLength = BR.ReadInt32();
        Char[] Chars = BR.ReadChars(StringLength);
        return new String(Chars);
    }
这个很好用


致以最良好的祝愿

这是zlib而不是ZIP。我认为您需要确定压缩文件中存在哪些头文件。这是zlib而不是ZIP。我认为您需要确定压缩文件中存在哪些标题。