내 루트 문제 즉 using
통화Dispose
에 StreamWriter
, 그것은 또한 처분 BaseStream
(같은 문제로를 Close
).
이에 대한 해결 방법이 있지만 보시다시피 스트림 복사가 포함됩니다. 스트림을 복사하지 않고이 작업을 수행 할 수있는 방법이 있습니까?
이것의 목적은 문자열의 내용 (원래 데이터베이스에서 읽음)을 스트림으로 가져 와서 제 3 자 구성 요소에서 스트림을 읽을 수 있도록하는 것입니다.
NB : 타사 구성 요소를 변경할 수 없습니다.
public System.IO.Stream CreateStream(string value)
{
var baseStream = new System.IO.MemoryStream();
var baseCopy = new System.IO.MemoryStream();
using (var writer = new System.IO.StreamWriter(baseStream, System.Text.Encoding.UTF8))
{
writer.Write(value);
writer.Flush();
baseStream.WriteTo(baseCopy);
}
baseCopy.Seek(0, System.IO.SeekOrigin.Begin);
return baseCopy;
}
사용
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
이상적으로 불리는 가상의 방법을 찾고 있어요 BreakAssociationWithBaseStream
, 예를 들어,
public System.IO.Stream CreateStream_Alternate(string value)
{
var baseStream = new System.IO.MemoryStream();
using (var writer = new System.IO.StreamWriter(baseStream, System.Text.Encoding.UTF8))
{
writer.Write(value);
writer.Flush();
writer.BreakAssociationWithBaseStream();
}
return baseStream;
}