我正在尝试使用CSVHelper
nuGet包
这是代码
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
和StreamWriter
的{{1}}语句做了同样的尝试
我已经尝试了所有这些并且它仍然是空白的
此外,CSVWriter
的长度始终为零
我做错了什么?
答案 0 :(得分:2)
想出来 - 我需要将一个字节数组而不是一个流传递给FileContentResult:
return File(ms.ToArray(), "text/csv", "test.csv");
答案 1 :(得分:0)
确保在使用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
}
答案 2 :(得分:0)
当CsvHelper没有输出时,最常见的原因是作者需要public static class ocSAFlags
{
static private ObservableCollection<flag> oCFlag = getSAFlags();
private static ObservableCollection<flag> getSAFlags()
{
var x = new ObservableCollection<flag>();
var sa = new SALinqDataContext();
var flags = sa.flags.Where(f => f.available == true)
.OrderBy(f => f.flag_desc);
foreach (flag f in flags) x.Add(f);
return x;
}
public static ObservableCollection<flag> OCFlag
{
get
{
return oCFlag;
}
}
}
使用没有配置的CsvWriter完美地工作
sw.Flush()
通过使用配置CsvWriter(sw); // with no configuration
,我想出了一个空的csv
IgnoreReferences = true
解决方案(完整示例)
CsvWriter(sw, new Configuration.CsvConfiguration() {
Delimiter = ";",
IgnoreReferences = true
});
在Github上找到提示:https://github.com/JoshClose/CsvHelper/issues/47