CSVHelper - No Output

本文关键字:Output No CSVHelper | 更新日期: 2023-09-27 18:10:30

我正在尝试使用CSVHelper nuGet包创建csv文件

代码

public ActionResult Test()
{
    var ms = new MemoryStream();
    var sr = new StreamWriter(ms);
    var csv = new CsvWriter(sr);
    csv.WriteField("sd");
    csv.WriteField("sd");
    csv.WriteField("sd");
    csv.WriteField("sd");
    //ms.Seek(0, 0);
    sr.Flush();
    //ms.Position = 0;
    var len = ms.Length;
    return File(ms, "text/csv", "test.csv");
}

但是,文件总是空白的

我在这里读了几个问题,建议StreamWriter需要冲洗。位置移到0。然而,我试过了,它似乎不起作用

我也尝试了同样的using语句的MemoryStream, StreamWriterCSVWriter我试了所有这些,它仍然是空白的

而且,MemoryStream的长度总是0

我做错了什么?

CSVHelper - No Output

弄清楚了——我需要传递一个字节数组,而不是一个流,给FileContentResult:

return File(ms.ToArray(), "text/csv", "test.csv");

当CsvHelper没有输出时,最常见的原因是,编写器需要一个sw.Flush()

使用CsvWriter无需配置就可以正常工作

CsvWriter(sw); // with no configuration

通过使用配置IgnoreReferences = true,我得到了一个空的csv

CsvWriter(sw, new Configuration.CsvConfiguration() {
    Delimiter = ";", 
    IgnoreReferences = true
});

解决方案(完整示例)

var ms = new System.IO.MemoryStream();
var sw = new System.IO.StreamWriter(ms);
var csvOut = new CsvWriter(sw, new Configuration.CsvConfiguration() { Delimiter = ";", IgnoreReferences = true });
csvOut.WriteRecords(someCollection);
// IMPORTANT LINE
sw.Flush();
ms.Position = 0;
return File(ms, "text/csv", "resultFile.csv");

Github提示:https://github.com/JoshClose/CsvHelper/issues/47

确保在使用WriteField方法writer.NextRecord();时写入记录结束要将数据写入CSV文件,可以使用下面的代码:

using (var sw = new StreamWriter(@"test.csv"))
        {
            var writer = new CsvWriter(sw);
            writer.WriteField("Fist field");
            writer.NextRecord();
            writer.WriteField("Second field");
            writer.NextRecord();
            //add what you wana here
        }