【问题标题】:c# creating file using memorystream instead of textwriterc#使用memorystream而不是textwriter创建文件
【发布时间】:2009-04-23 13:02:28
【问题描述】:

我有一个应用程序当前正在创建要导入到会计应用程序中的文本文件。它使用以下代码创建文件并向其中写入行:

    TextWriter tw = new StreamWriter(ExtractFileName);

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

我现在需要创建多个提取文件并计划使用 SharpZipLib (#ziplib) 将它们压缩为单个 .zip 文件,并希望更改我的代码以“在内存中”创建文本文件并使用它来创建我的压缩文件。我想我应该创建/使用 MemoryStream 但不知道如何移植我现有的代码。

谢谢。

【问题讨论】:

    标签: c# memorystream


    【解决方案1】:

    你可以这样做:

    MemoryStream  memoryStream = new MemoryStream();
    TextWriter tw = new StreamWriter(memoryStream);
    
    tw.WriteLine("ref\tACCOUNT\tbatch\tDEBIT\tCREDIT\tDesc");
    

    【讨论】:

    • 完美,感谢您的快速回复。我的 .zip 文件现已创建。
    • 太好了,很高兴能提供帮助:)
    • 一般建议使用using和内存流来保证处置。
    • @ppumkin - 同意,但是:1) 我的示例旨在展示如何将 MemoryStream 与 StreamWriter 一起使用,而不是关于资源处理的讲座。 2) 何时以及如何处理流在很大程度上取决于 OP 的其余代码。始终确保处置,尽管您并不总是可以使用using
    【解决方案2】:

    不要创建不必要的抽象。虽然导出器类很酷,但它只有在您拥有多个导出策略时才会增加价值。否则,混乱会分散您代码的核心目的。

    如果您想将导出器添加到实践中,这是一种很好的抽象技术,但是在编写任何大量代码时都有无限抽象机会。 只有在特定流程或数据集有多个实现时,抽象才会创建模块化并减少代码。

    【讨论】:

    • @MarcL。克苏鲁FHTAGN!
    【解决方案3】:

    我还建议,现在是尝试解耦应用程序的各个部分的好时机,以便您将来可以更改它的某些部分。因此,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);
    

    现在通过提供独立于协议的接口,您以后的生活会更轻松。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 2022-11-24
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      相关资源
      最近更新 更多