txt - c#creando archivo usando memorystream en lugar de textwriter
streamwriter parameters c# (3)
Tengo una aplicación que actualmente está creando un archivo de texto para importar a una aplicación de contabilidad. Está utilizando el siguiente código para crear el archivo y escribirle líneas:
TextWriter tw = new StreamWriter(ExtractFileName);
tw.WriteLine("ref/tACCOUNT/tbatch/tDEBIT/tCREDIT/tDesc");
Ahora necesito crear varios archivos de extracción y planear comprimirlos en un solo archivo .zip usando SharpZipLib (#ziplib) y quiero cambiar mi código para crear el archivo de texto "en la memoria" y usarlo para crear mi archivo zip. Creo que debería crear / usar un MemoryStream pero no puedo descifrar cómo portar mi código existente.
Gracias.
Podrías hacerlo:
MemoryStream memoryStream = new MemoryStream();
TextWriter tw = new StreamWriter(memoryStream);
tw.WriteLine("ref/tACCOUNT/tbatch/tDEBIT/tCREDIT/tDesc");
También sugiero que este sea un buen momento para intentar desacoplar partes de tu aplicación, para que puedas cambiar partes en el futuro. Por lo tanto, un TextWriter
es una buena abstracción para una secuencia de escritura, pero también puede abstraer su clase de exportación.
Por ejemplo, ahora quiere hacerlo así:
MemoryStream memoryStream = new MemoryStream();
TextWriter tw = new StreamWriter(memoryStream);
// tab-delimited export
IExporter exporter = new DelimiterExport(data, tw, "/t");
exporter.Export();
para que pueda cambiarlo fácilmente a:
// csv file (stands for "comma separated value", but you should actually
// use a culture-specific list separator instead)
var separator = Thread.CurrentThread.CurrentCulture.TextInfo.ListSeparator;
IExporter exporter = new DelimiterExport(data, tw, separator);
o cualquier otra implementación:
// excel export
IExporter exporter = new ExcelExport(data, tw);
Al proporcionar una interfaz independiente del protocolo ahora, le facilitará la vida más adelante.
No crees abstracción innecesaria. Si bien la clase de exportador es genial, solo agrega valor cuando tiene más de una estrategia de exportación. De lo contrario, es un desorden que distrae del propósito principal de tu código.
Si desea agregar al exportador para practicar una buena técnica de abstracción, está bien, pero hay infinitas oportunidades de abstracción al escribir cualquier cantidad significativa de código. La abstracción crea modularidad y reduce el código solo cuando hay múltiples implementaciones de un proceso o conjunto de datos en particular.