2012-04-27 6 views
0

私はC#コードでIonic.Zlib.DeflateStream(私はDotNetZipとも呼ばれています)と一緒に働いていて、System.IO.Compression.DeflateStreamのようなBaseStreamプロパティがないことに気付いています。これにアクセスする簡単な方法はありますか?部分的なクラスまたは拡張(おそらくそれらの概念に精通していない)か、私が見落としているだけのものか、このライブラリの更新版ですか?いいえIonic.Zlib.DeflateStream.BaseStream

更新:Ionic.Zlib.DeflateStreamをパラメータとして指定した大きなプロジェクトの内部には、深い機能があります。私は基礎をなすストリームがMemoryStreamであることを知っています。そして、基になるストリームに0を配置し、数バイトを書き込んでから、previosの位置に戻るようにコードを修正したいと思います。これは、多くのコードを書き換えるのではなく、 "kludge"(汚れたハック)と呼ばれています...しかし、これは、より多くの再テストを必要とする他のものとは対照的に、現時点で我々が求めている解決策です。更新が必要なMemoryStreamのこの部分のいくつかのバイトは圧縮されていないため、この問題でDeflateStreamの外側に変更するのは問題ありません。

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

理想的には私が唯一、どのような()関数を変更する必要があると思います最初にオブジェクトを作成したが、この場合は私が行う。だから、私はこれを扱う可能性のある方法を見つけたとしても、答えを期待しています。

関連する問題