私の根本的な問題は、ときということですusing
呼び出すDispose
にはStreamWriter
、それはまた、配置BaseStream
(同じ問題を持つがClose
)。
これには回避策がありますが、ご覧のとおり、ストリームのコピーが必要です。ストリームをコピーせずにこれを行う方法はありますか?
これの目的は、文字列(元はデータベースから読み取られた)の内容をストリームに取得して、サードパーティのコンポーネントがストリームを読み取れるようにすることです。
注意:サードパーティのコンポーネントは変更できません。
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;
}