我有一个模板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);
现在,我的问题是,无论用户是否保存文件,我应该何时删除生成的文件?一旦用户关闭关于打开或保存文件的弹出窗口,我宁愿使用。但是如何知道用户何时关闭该窗口?
答案 0 :(得分: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"));
}
答案 1 :(得分:1)
何时删除文件(或者最好说“保留文件的时间长度”)是一个最符合应用程序业务规则的问题。
过去,在流量较低的应用程序中,我使用“清理”例程来删除早于某个阈值的文件。在创建新文件时执行清理,此时指定文件夹中任何超过阈值的文件都将被删除。