【问题标题】:Write to a File using CsvHelper in C#在 C# 中使用 CsvHelper 写入文件
【发布时间】:2014-04-21 07:12:43
【问题描述】:

我尝试使用 C# 中的 CsvHelper 写入 CSV 文件。
这是图书馆的链接http://joshclose.github.io/CsvHelper/

我在网站上使用了代码。

这是我的代码:

var csv = new CsvWriter(writer);
csv.Configuration.Encoding = Encoding.UTF8;
foreach (var value in valuess)
{
    csv.WriteRecord(value);
}

它只将部分数据写入 csv 文件。
最后一行丢失了。
你能帮忙吗?

【问题讨论】:

  • 你能再展示一些你的代码吗?尤其是writer的声明很有意思。
  • 什么时候,我在循环代码运行良好之后添加了这段代码 writer.Close();

标签: c# csvhelper


【解决方案1】:

您需要刷新流。 Using 语句将在超出范围时刷新。

using (TextWriter writer = new StreamWriter(@"C:\test.csv", false, System.Text.Encoding.UTF8))
{
    var csv = new CsvWriter(writer);
    csv.WriteRecords(values); // where values implements IEnumerable
}

【讨论】:

    【解决方案2】:

    什么时候,我在循环代码运行良好后添加了这段代码

    var csv = new CsvWriter(writer);
    csv.Configuration.Encoding = Encoding.UTF8;
    foreach (var value in valuess)
    {
         csv.WriteRecord(value);
    }
    writer.Close();
    

    问题发生是因为我没有关闭连接

    【讨论】:

    • 你应该处置你的作家,“使用”是一个很好的做法using (var writer = new StreamWriter(filepath)) { ... }
    • 从 CSVHelper 13.0.0 开始 Factory.CreateWriter joshclose.github.io/CsvHelper/change-log 发生重大变化
    • 对于 ANSI - Windows-1252?
    【解决方案3】:

    假设writer 是某种TextWriter,您应该在关闭写入器之前添加一个刷新内容的调用:

    writer.Flush()
    

    如果缺少最后几行,这是最可能的原因。

    【讨论】:

    • 什么时候,我在循环代码运行良好之后添加了这段代码 writer.Close();
    【解决方案4】:

    添加到@greg 的答案:

    using (var sr = new StreamWriter(@"C:\out.csv", false, Encoding.UTF8)) {
      using (var csv = new CsvWriter(sr)) {
        csv.WriteRecords(values);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      相关资源
      最近更新 更多