簡體   English   中英

c#使用memorystream而不是textwriter創建文件

[英]c# creating file using memorystream instead of textwriter

我有一個應用程序,當前正在創建一個文本文件導入到一個會計應用程序。 它使用以下代碼創建文件並向其寫入行:

    TextWriter tw = new StreamWriter(ExtractFileName);

    tw.WriteLine("ref\tACCOUNT\tbatch\tDEBIT\tCREDIT\tDesc");

我現在需要創建多個提取文件,並計划使用SharpZipLib(#ziplib)將它們壓縮為單個.zip文件,並希望更改我的代碼以在內存中創建文本文件,並使用它創建我的zip文件。 我想我應該創建/使用MemoryStream但是無法弄清楚如何移植我現有的代碼。

謝謝。

你可以這樣做:

MemoryStream  memoryStream = new MemoryStream();
TextWriter tw = new StreamWriter(memoryStream);

tw.WriteLine("ref\tACCOUNT\tbatch\tDEBIT\tCREDIT\tDesc");

不要創建不必要的抽象。 雖然導出器類很酷,但只有在有多個導出策略時才會增加價值。 否則,它會使您的代碼的核心目的分散注意力。

如果你想添加導出器來實踐一個很好的抽象技術,但是在編寫任何大量代碼時都有無限的抽象機會。 只有在特定進程或數據集的多個實現時,抽象才會創建模塊化並減少代碼。

我還建議現在是嘗試將應用程序的各個部分分離的好時機,以便將來可以更改部分應用程序。 因此, TextWriter是可寫流的良好抽象,但也考慮抽象出口類。

例如,你現在想要這樣做:

MemoryStream  memoryStream = new MemoryStream();
TextWriter tw = new StreamWriter(memoryStream);

// tab-delimited export
IExporter exporter = new DelimiterExport(data, tw, "\t"); 
exporter.Export();

這樣您就可以輕松將其更改為:

// 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);

或任何其他實施:

// excel export
IExporter exporter = new ExcelExport(data, tw);

通過現在提供獨立於協議的界面,您將在以后更輕松地生活。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM