En lugar de utilizar StringBuilder
, trate de usar TextWriter
(que tiene una API similar en términos generales, pero que se puede escribir en una serie de destinos subyacentes, incluyendo archivos) - es decir
using(TextWriter writer = File.CreateText(path))
{
// loop etc
writer.Write(...);
}
De manera más general, vale la pena separar el código que sabe acerca de los archivos de código que sabe acerca de cómo escribir los datos, es decir
using(var writer = File.CreateText(path))
{
Serialize(writer);
}
...
void Serialize(TextWriter writer)
{
...
}
esto hace que sea más fácil escribir para diferentes objetivos. Por ejemplo, ahora se puede hacer en memoria también: ser
var sw = new StringWriter();
Serialize(sw);
string text = sw.ToString();
El punto: su código Serialize
no necesita cambiar para acomodar un objetivo diferente. Esto también podría estar escribiendo directamente en una red, o escribiendo a través de una corriente de compresión/encriptación. Muy versátil.
¿No podría simplemente hacer File.WriteAllText con el texto que está agregando en lugar de ponerlo en un generador de cadenas y hacerlo todo a la vez? –
@Bali para llamar a 'WriteAllText' necesita tener todo el texto, por lo que no ayuda con los problemas de memoria –
@MarcGravell Ah sí, mi error, gracias Marc –