मेरी जड़ समस्या यह है कि जब एक पर using
कॉल Dispose
किया जाता है StreamWriter
, तो यह भी BaseStream
(उसी समस्या के साथ Close
) का निपटान करता है ।
मेरे पास इसके लिए वर्कअराउंड है, लेकिन जैसा कि आप देख सकते हैं, इसमें स्ट्रीम को कॉपी करना शामिल है। क्या धारा को कॉपी किए बिना ऐसा करने का कोई तरीका है?
इसका उद्देश्य एक स्ट्रिंग की सामग्री (मूल रूप से एक डेटाबेस से पढ़ा जाता है) को एक स्ट्रीम में प्राप्त करना है, इसलिए स्ट्रीम को तीसरे पक्ष के घटक द्वारा पढ़ा जा सकता है।
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;
}