使用C#打开Delphi ZLib压缩数据

马尔滕

我有许多用Delphi编写的应用程序制作的文件,这些文件要在C#应用程序中打开。我正在写。

用于解压缩文件的“旧” Delphi代码为:

InputStream := TFileStream.Create(InputFileName, fmOpenRead);
OutputStream := TMemoryObjStream.Create;
DecompressionStream := TZDecompressionStream.Create(InputStream);
OutputStream.CopyFrom(DecompressionStream, 0);

这是我用来在c#中打开这些文件的代码:

FS = new System.IO.FileStream(File, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Read);
System.IO.MemoryStream MS = new System.IO.MemoryStream();
ZLibNet.ZLibStream ZS = new ZLibNet.ZLibStream(S, ZLibNet.CompressionMode.Decompress);
ZS.CopyTo(MS);
ZS.Close();
FS.close();

如果现在开始使用二进制读取器读取“ MS流”,则我会在前24个字节中获取一些奇怪的数据,然后我得到的值似乎是合乎逻辑的。
首先,它应该读取一个Int32,它具有有意义的值。在该字符串之后,该字符串显示为“ \ 0 \ 0 \ 0ISua”,我希望在其中看到“ ISuarez”。但是,如果我将流位置再移动一个字节,我会得到“ Suarez \ n \ 0 \ 0 \ 0”。
这让我想知道我是否可能稍后再开始读取流而不是字节,但是该怎么做呢?

马尔滕

我将这个问题搁置了一会儿,最近又做了另一次尝试来解决它,发现出了什么问题:

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);
    }

而且这很好。

最好的祝福!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用zlib解压缩来自TCP连接的传入数据(压缩数据)

如何通过FireDac(Delphi)从FireBird数据库流式传输使用zlib压缩的图像

如何在C#中压缩数据以在zlib python中解压

使用Node.JS zlib模块解压缩没有标题的gzip数据

使用 boost zlib 从 std::vector 中的文件读取压缩的 zraw 数据

使用zlib.js解压缩python zlib compress

如何使用多个线程进行zlib压缩

使用 zlib 解压缩 zip 文件

使用 zlib 压缩的数据格式是什么以及如何从命令行或其他应用程序解压缩它们?

zlib压缩数据时的内存分配?

我如何使用zlib在C中压缩并在golang中解压缩

Zlib在C中解压缩未知长度的字节

使用zlib压缩boost二进制归档文件

如何使用多个线程进行zlib压缩(相同的输入源)

在Java中使用Deflate和Inflate类进行Zlib压缩

使用 zlib + base64 [python] 压缩 numpy 数组

使用wiredtiger和zlib压缩将csv文件导入MongoDB

使用字节切片解压缩压缩的ZLib字符串

使用DEFLATE(RFC 1951)函数压缩和解压缩zlib(RFC 1950)

使用zlib在php中压缩字符串并在python中解压缩

如何使用压缩算法进行图像压缩,即LZ4,LZMA,ZLIB swift

使用zlib + dictionary压缩/解压缩spdy名称/值块时出错

使用zlib压缩/解压缩char数组,缺少一些字符

使用zlib / minizip解压缩zip文件:C / C ++应用程序

结合使用zlib和const数据

C ++:如何使用zlib或lib_tar获得未压缩的大小

使用C#打开Access数据库

使用openfiledialog获取打开的数据库C#的路径

无法解压缩数据;zlib不可用