CSVHelper - 无输出

7

我正在尝试使用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。然而,我尝试过了,似乎不起作用。
我还尝试了使用MemoryStreamStreamWriterCSVWriterusing语句。我尝试了所有这些方法,但仍然是空白的。
此外,MemoryStream的长度始终为零。
我做错了什么?

1
你的代码甚至都无法编译...? - Thomas
假设您没有引用csvhelper dll或者没有MVC引用。 - ChrisCa
3个回答

4

我明白了 - 我需要传递一个字节数组,而不是流,到FileContentResult中:

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

如果其流或ToArray转换与CsvWriter没有直接关系,则在某些情况下我注意到CsvWriter为零(空)。 - Ole K

2

每当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


0

当使用WriteField方法写入数据到CSV文件时,请确保您编写记录结束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
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接