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 Position으로 돌아가 코드를 수정하려고합니다. 이것은 많은 코드를 다시 작성하는 것과는 대조적으로 우리가 "kludge"라고 부르는 것입니다. 그러나 이것은 더 많은 재검사가 필요한 다른 것과는 대조적으로 현재로서는 우리가 찾고있는 해결책입니다. 업데이트해야 할 MemoryStream 부분의 몇 바이트는 압축되지 않으므로 DeflateStream 외부에서 수정하는 것이 좋습니다.

+1

당신이 성취해야한다고 생각하는 방식보다는 성취하려는 것을 기술하십시오. –

답변

0

난 아직이 답변이 문제가 발생할 수 있다면 미래의 프로젝트에 대한 다른 옵션을 알고, 또는 싶습니다,하지만 난 하나의 옵션을 발견했다고 생각 ...

나는이 같은 객체를 생성 :

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

나는 같은 클래스를 만드는 대신하는 경우 :

:

class MyDeflateStream : DeflateStream 
{ 
public MemoryStream RootStream; 
} 

내가에 위의 코드를 변경할 수 있습니다 때로는 코드에 액세스하지 수 있기 때문에,

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

가 이상적으로 만 무엇이든() 함수를 수정해야 할 것 :

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

그럼 내가이 같은 것을 액세스를 필요로하는 기능을 처음에는 객체를 만들었지 만,이 경우에는 할 수 있습니다. 그래도 대답을 원한다면, 내가 이것을 처리 할 수있는 한 가지 방법을 찾았음에도.