2016-09-14 10 views
0

OpenXMLとMemoryStreamを使用してExcelファイルを書き出すと、ファイルパスに余分な文字が追加されることがあります。それは毎回発生しません。私が最初にそれをロードするとき、それはちょうどうまくいくようですが、それを実行した後に余分な文字を追加し始めます。私は、メモリリークやバッファの問題があると仮定しますが、私はそれを修正するための十分なことはわかりません。C#メモリストリーム/ OpenXMLでファイル名に余分な文字が追加されることがあります

私のコードは次のとおりです。

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だけではなくレポートと日付を。

ご協力いただければ幸いです。

+0

あなたは 'Response.Clear()'がヘッダーをクリアしないことに気付きましたか?逆の言い方をすると、 'Response.ClearHeaders()'を適切な場所に呼び出すことで、幸せな終わりに向かって何かが変わるでしょうか? – grek40

+0

最初の実行時に余分な文字が追加されているように見えますが、それ以降のすべての文字は追加されます。それがヘッダーであるのか、初めてヘッダーが動作しないのかわかりません。 – JRich

+0

コードが文字列と一致しません。あなたは '' .xlsx "'を追加していますが、結果に '' .XLSX "'という拡張子があります(そしてこの違いは '" CAOFMLJL.XLSX "'が追加された理由を説明します)。 – Sinatr

答えて

0

私のマシンでは、DateTime.Now.ToShortDateString()は、2014年14月14日にプリントします。これはシステム設定と関係があります。たぶんこの代わりに(またはあなたが必要とする他のフォーマットで)試してみてください。

DateTime.Now.ToString("dd_MM_yyyy") 

スラッシュはWindowsのファイル名には無効です。

+0

これはそうだと思います。私は数十回それをテストし、追加文字を追加していない。しかし、それは時々追加するように見えたので、私はもう少しテストを行い、それが戻ってこないなら、これを答えとしてマークします。 – JRich

関連する問題