【问题标题】:C# Memory Stream/OpenXML sometimes adds extra characters to file nameC# Memory Stream/OpenXML 有时会在文件名中添加额外的字符
【发布时间】:2016-09-14 14:19:09
【问题描述】:

我使用 OpenXML 和 MemoryStream 导出 Excel 文件,它有时会在文件路径中添加额外的字符。它不会每次都发生。当我第一次加载它时,它似乎工作得很好,但是在运行了一堆之后它开始添加额外的字符。我假设存在内存泄漏或缓冲区问题,但我对此了解的不够多,无法修复它。

我的代码是:

using (var stream = new MemoryStream())
{                
     report.CreatePackage(stream);

     System.Web.HttpContext.Current.Response.Clear();
     System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
     System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=Report_" + DateTime.Now.ToShortDateString() + ".xlsx");
     stream.Position = 0;
     stream.CopyTo(System.Web.HttpContext.Current.Response.OutputStream);
     System.Web.HttpContext.Current.Response.Flush();
     System.Web.HttpContext.Current.Response.Close();
     System.Web.HttpContext.Current.Response.End();
 }  

它在文件路径中看起来像这样:Report_09_14_2016CAOFMLJL.xlsx 而不仅仅是报告和日期。

任何帮助将不胜感激。

【问题讨论】:

  • 您知道Response.Clear() 不会清除标题吗?反过来说:在适当的地方致电Response.ClearHeaders() 是否会改变任何事情走向幸福的结局?
  • 似乎在第一次运行它时,它仍然会添加额外的字符,但之后的每一次都有效。我不确定这是标题还是为什么它第一次不起作用。
  • 代码与字符串不匹配。您正在添加".xlsx",但结果中有".XLSX" 扩展名(这种差异可能解释了为什么添加"CAOFMLJL.XLSX")。
  • 抱歉打错了。换班很开心。它已被编辑以反映实际的文件名。
  • 在我的机器上 DateTime.Now.ToShortDateString() 打印 14/09/2016,我猜它与系统设置有关。也许试试这个而不是 DateTime.Now.ToString("dd_MM_yyyy")。斜杠在 Windows 上的文件名中无效。

标签: c# openxml filepath memorystream


【解决方案1】:

在我的机器上 DateTime.Now.ToShortDateString() 打印 14/09/2016,我猜它与系统设置有关。也许试试这个(或你需要的任何其他形式):

DateTime.Now.ToString("dd_MM_yyyy")

斜线在 Windows 上的文件名中无效。

【讨论】:

  • 我认为是这样。我已经测试了几十次,没有添加额外的字符。但是,它似乎只是有时会添加它,所以我会做更多的测试,如果它没有回来,我会在稍后将其标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多