没有Ionic.Zlib.DeflateStream.BaseStream

时间:2012-04-27 15:48:32

标签: c# compression dotnetzip

我正在使用C#代码中的Ionic.Zlib.DeflateStream(我认为也就是DotNetZip)并注意它没有像System.IO.Compression.DeflateStream那样的BaseStream属性。有没有简单的方法来访问它?也许是部分类或扩展(不熟悉这些概念)或者我正在忽略的东西,或者这个库的更新版本?

更新:我在一个大型项目内部具有深层功能,该项目被赋予Ionic.Zlib.DeflateStream作为参数。我知道底层流是一个MemoryStream,我想修改代码以在底层流中寻找位置0,写入几个字节,然后返回到previos位置。这就是我们称之为“kludge”或脏兮兮的东西,而不是重写大量代码......但这是我们此时正在寻找的解决方案,而不是需要更多重新测试的其他东西。 MemoryStream的这部分需要更新的几个字节没有被压缩,所以在这个问题上修改它们在DeflateStream之外是可以的。

1 个答案:

答案 0 :(得分:0)

我仍然想知道未来项目的其他选择,或者如果这个答案可能导致问题,但我想我确实找到了一个选项...

当我创建这样的对象时:

MemoryStream ms = new MemoryStream();
DeflateStream ds = new DeflateStream(ms,...);

如果我改为创建一个类:

class MyDeflateStream : DeflateStream
{
public MemoryStream RootStream;
}

我可以将上面的代码更改为:

MemoryStream ms = new MemoryStream();
MyDeflateStream ds = new MyDeflateStream (ms,...);
ds.RootStream = ms;

然后将我需要访问的函数设置为:

void Whatever(DeflateStream ds)
{
MyDeflateStream mds = (MyDeflateStream)ds;
MemoryStream ms = mds.RootStream;
}

理想情况下,我只需要修改Whatever()函数,因为有时我可能无法访问创建该对象的代码,但在这种情况下我会这样做。所以仍然希望得到一个答案,即使我找到了一种可能的方法来解决这个问题。