0

私は C# コードで Ionic.Zlib.DeflateStream (別名 DotNetZip だと思います) を使用していますが、System.IO.Compression.DeflateStream のような BaseStream プロパティがないことに気付きました。これにアクセスする簡単な方法はありますか?部分的なクラスまたは拡張機能 (これらの概念にあまり慣れていない)、または私が見落としているもの、またはこのライブラリの更新されたバージョンでしょうか?

更新: Ionic.Zlib.DeflateStream がパラメーターとして指定された大規模なプロジェクトの奥深くに機能があります。基になるストリームが MemoryStream であることはわかっています。コードを変更して、基になるストリームの位置 0 をシークし、数バイトを書き込んでから、前の位置に戻りたいと考えています。これは、多くのコードを書き直すこととは対照的に、「クラッジ」またはダーティハックと呼ばれるものです...しかし、これは、より多くの再テストを必要とする他の何かとは対照的に、現時点で私たちが探しているソリューションです. 更新する必要がある MemoryStream のこの部分の数バイトは圧縮されていないため、この問題で DeflateStream の外でそれらを変更しても問題ありません。

4

1 に答える 1

0

将来のプロジェクトの他のオプションを知りたい、またはこの回答が問題を引き起こす可能性があるかどうかを知りたいのですが、1つのオプションを見つけたと思います...

次のようにオブジェクトを作成すると:

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() 関数を変更するだけでよいのが理想ですが、この場合はアクセスできます。これを処理する1つの可能な方法を見つけたにもかかわらず、まだ答えを望んでいます。

于 2012-04-27T16:22:05.267 に答える