আমার মূল সমস্যাটি হ'ল যখন 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;
}