0

我有一个模板 excel 文件,可以从中生成 excel 文件。

我的代码如下(这部分是从模板创建一个新的excel文件):

string currentFN = PropertyFinalResult[0].Fecha;
        string fixCurrentFN = currentFN.Replace('/', '_');

        string currentTime = DateTime.Now.ToLongTimeString();
        string fixCurrentTime = currentTime.Replace(':', '_');
        string addToFileName = fixCurrentTime.Replace(' ', '_');

        string newFN = fixCurrentFN + "-" + addToFileName;

        string SourceFile = Request.PhysicalApplicationPath + "Template\\ExcelTemplate.xlsx";
        string DestFile = Request.PhysicalApplicationPath + "Template\\" + newFN + ".xlsx";
        //To keep FileName for posterior deletion
        Session["sDestFile"] = DestFile;

        try
        {                
            File.Copy(SourceFile, DestFile);                
        }
        catch (Exception ex)
        {
            lblErrorSavingToDB.Text = "Error: " + ex.Message;
            lblErrorSavingToDB.Visible = true;
        }

之后,我打开新的 excel 文件,在其中插入记录,然后通过执行以下操作将文件流式传输给用户:

//Streaming file to client                    
                string fileName = newFN + ".xlsx";
                Response.Redirect("../Template/" + fileName);

现在,我的问题是,无论用户是否保存文件,我应该什么时候删除生成的文件?我希望用户关闭有关打开或保存文件的弹出窗口。但是如何知道用户何时关闭该窗口?

4

2 回答 2

3

您可以使用TransmitFile,然后在传输结束后关闭。例子:

                try
                {
                    Response.ContentType = "application/octet-stream";
                    Response.AddHeader("content-disposition", "attachment;filename=\"" + Path.GetFileName(path.FullName) + "\"");
                    Response.AddHeader("content-length", path.Length.ToString());
                    Response.TransmitFile(path.FullName);
                    Response.Flush();
                }
                finally
                {
                    File.Delete(Server.MapPath("~/"+tpacode+".zip"));
                }
于 2013-01-25T18:52:45.843 回答
1

何时删除文件(或者最好说“保留文件多长时间”)是应用程序业务规则最好回答的问题。

过去,在低流量应用程序中,我使用“清理”例程来删除超过某个阈值的文件。创建新文件时会执行该清理,届时指定文件夹中任何早于阈值的文件都将被删除。

于 2013-01-25T18:54:51.540 回答