C# 将字符串转换为流
我试图使用Controller.file方法返回一个大的.csv文件作为操作结果,它要求我使用C# 将字符串转换为流,c#,asp.net,string,stream,C#,Asp.net,String,Stream,我试图使用Controller.file方法返回一个大的.csv文件作为操作结果,它要求我使用byte[]或流 当使用GetBytes方法时,我得到一个OutOfMemoryException 有没有办法做到这一点,而不试图把所有的记忆在同一时间 这是我目前使用的回报: string csv = data.ToCsv(); return File(Encoding.UTF8.GetBytes(csv), "text/csv", "ClusterFMCacheExport.csv"); 已经有一
byte[]
或流
当使用GetBytes
方法时,我得到一个OutOfMemoryException
有没有办法做到这一点,而不试图把所有的记忆在同一时间
这是我目前使用的回报:
string csv = data.ToCsv();
return File(Encoding.UTF8.GetBytes(csv), "text/csv", "ClusterFMCacheExport.csv");
已经有一段时间没有使用ASP.NET了,但不应该这样做(假设文件已经在磁盘上): 你试过这个吗
using(MemoryStream stream = new MemoryStream())
using(StreamWriter writer = new StreamWriter(stream))
{
writer.Write(s);
writer.Flush();
stream.Position = 0;
return File(stream, "text/csv", "ClusterFMCacheExport.csv");
}
如果你的数据真的那么大,这可能没有帮助。如果生成非常大的csv文件,我建议您重新编写ToCsv()
生成流
,而不是字符串
不会:
Response.AddHeader("content-disposition", "attachment;filename=file.csv");
return Content(csv, "application/csv");
避免转换?不过,它可能只是把它踢了出去,只会让OOME在其他地方重新出现。在这里显示您的代码。。人们看不懂你的心思..“一个大的.csv文件”在磁盘上?我正在构建字符串,然后尝试将其作为csv文件返回。你不需要类似文件的东西吗?OpenRead(文件)或new StreamReader(文件)你确定它没有在
ToCSV()上得到OutOfMemoryException
?将字符串读入MemoryStream@user2081737老实说,我没想到会这样。我想你必须重写ToCsv
。很高兴能帮上忙。我想我还是会的。还是花了很长时间。
Response.AddHeader("content-disposition", "attachment;filename=file.csv");
return Content(csv, "application/csv");