【发布时间】:2021-06-22 15:32:15
【问题描述】:
如何在内存中创建一个 csv 文件并将其返回为 FileStreamResult?
我尝试写信给memorystream,然后用FileStreamResult 将其返回,但我总是收到错误ObjectDisposedException: Cannot access a closed Stream.。我尝试将 leaveopen 设置为 true 并像告诉 here 那样手动处理,但我仍然遇到同样的错误。
[HttpGet]
public FileStreamResult GetData()
{
var myResult = DataGetter.GetData().ToList();
using var memStream = new MemoryStream();
var writer = new StreamWriter(memStream, Encoding.UTF8, 1024, true);
var csv = new CsvWriter(writer, CultureInfo.InvariantCulture,true);
csv.WriteRecords(myResult );
var fileStreamResult = new FileStreamResult(memStream, "text/csv");
csv.Dispose();
writer.Dispose();
return fileStreamResult;
}
【问题讨论】:
-
csv.Dispose();你在这里处理它,所以在返回之前删除此行。另外,请记住流实现了“IDisposable”,因此请记住将它们包含在using块中。 -
这能回答你的问题吗? Using CSVHelper to output stream to browser
-
您需要写入 ROW 数据,并在每行末尾返回一个 (WriteLine)。然后在添加新行之前从文件中读取一行以为新行腾出空间。使用 List
- > 比使用流更好。
-
@gunr2171 它正在工作,但我想重用相同的流而不是转换为字节数组,然后打开一个新的内存流
标签: c# asp.net-core .net-5 csvhelper