4

我正在尝试使用CSVHelpernuGet 包创建一个 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。但是,我试过了,它似乎不起作用

我也尝试了相同的语句usingMemoryStream我 已经尝试了所有这些,但它仍然是空白的StreamWriterCSVWriter

更重要的是, 的长度MemoryStream始终为零

我究竟做错了什么?

4

3 回答 3

2

想通了-我需要将字节数组而不是流传递给 FileContentResult :

return File(ms.ToArray(), "text/csv", "test.csv");
于 2014-06-30T11:44:19.087 回答
0

writer.NextRecord(); 确保在使用 WriteField 方法将数据写入 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
        }
于 2014-06-27T16:50:51.100 回答
0

当 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

于 2017-02-03T15:59:37.963 回答