9

我必须在我的站点中实现 GEDCOM 导出。

单击导出到 gedcom 时,我的 .net 代码在服务器上创建了一个文件。

然后我需要将它从服务器下载到客户端,并且应该询问用户将该文件保存在哪里,这意味着需要 savedialog。

下载后,我想从服务器中删除该文件。

我有一个代码将文件从服务器传输到客户端:

Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();

从这个链接

但我无法在此代码Response.End结束响应后删除文件,因此在该行之后编写的任何代码都不会执行。

如果我之前执行删除文件的代码Response.End();,则文件不会传输并且我收到错误消息。

4

2 回答 2

24

您在 Response.End 之后放置的任何内容都不会被执行,因为它会引发 ThreadAbortException 以在该点停止执行页面。

试试这个:

string responseFile = Server.MapPath("~/" + FileName);

try{
    Response.ContentType = "text/xml";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
    Response.TransmitFile(responseFile);
    Response.Flush();
}
finally {
    File.Delete(responseFile);
}
于 2010-04-22T05:11:37.013 回答
2

如果文件相当小,您可以将其加载到字节数组中,这样您就可以在删除文件的同时仍然能够发送数据:

Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
string path = Server.MapPath("~/" + FileName);
byte[] data = File.ReadAllBytes(path);
File.Delete(path);
Response.BinaryWrite(data);
Response.End();
于 2010-04-22T05:10:06.890 回答