Mon problème de base est que, lorsque l' using
des appels Dispose
sur StreamWriter
, il dispose également de la BaseStream (même problème avec Close
).
J'ai une solution pour cela, mais comme vous pouvez le voir, il implique de copier le flux. Est-il possible de faire cela sans avoir à copier le flux?
Le but de cette opération est d'obtenir le contenu d'une chaîne de caractères (à l'origine de lire à partir d'une base de données) dans un cours d'eau, de sorte que le flux peut être lu par un tiers de la composante.
NB je ne peux pas changer les composants tiers.
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;
}
Utilisé comme
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
Idéalement, je suis à la recherche d'un imaginaire méthode appelée BreakAssociationWithBaseStream
, par exemple
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;
}