【发布时间】:2015-10-15 09:05:16
【问题描述】:
我有很多用 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-stream”
我在前 24 个字节中得到了一些奇怪的数据,然后我得到了似乎合乎逻辑的值。
首先,它应该读取一个 Int32 并且它具有合理的值。
之后是一个字符串,这个字符串显示为“\0\0\0ISua”,我希望是“ISuarez”。但是,如果我将流位置再移动一个字节,我会得到“Suarez\n\0\0\0”
这让我想知道我是否可以稍后开始读取流而不是字节,但是该怎么做呢?
【问题讨论】:
-
这是 zlib 而不是 ZIP。我认为您需要弄清楚压缩文件中存在哪些标头。