2008-10-14 57 views

回答

3

这是完全同步的,因为你可以通过查看HttpResponse.WriteFile实施与卢茨反射看到。您可以在拨打Response.WriteFile后立即删除文件。

您不能保证响应流已被完全传输到客户端,但拨打Response.Flush也不能保证您有任何担保。所以在删除文件之前我没有看到需要调用Response.Flush

避免将文件加载到MemoryStream,它不会给您带来任何好处,并且会消耗内存,尤其是对于大文件。

+0

谢谢,这也帮助我! – 2012-03-29 18:14:20

0

如果内存服务它是同步的,就像其余的RESPONSE命令一样。

9

如果您正在使用Response.WriteFile()向客户端写入文件,则调用Response.Flush()将确保它已完全输出到客户端。完成后,您可以将其从网络服务器上删除。

如果文件是关键任务,您可能想要提供一个更强大的系统。假设客户端脚本验证文件已收到,然后警告Web服务器该文件可以被删除。

+0

对我来说,以下方法起作用:`Response.Flush(); Response.Close(); File.Delete(path);` – Cosmin 2013-11-19 13:54:41

0

的TransmitFile

您也可以拨打的TransmitFile让IIS照顾它。它实际上是由您的工作进程之外的IIS发送的。

内存流

如果你比较偏执,不发送文件。将其加载到内存流(如果大小合理)并传输它。然后,您可以随时删除该文件。磁盘上的文件永远不会被IIS触及。

5

这是解决方案,使用后的语法Response.WriteFile(fileName);,键入下面的代码行:

Response.Flush(); 
System.IO.File.Delete(fullPathFileName); 
Response.End(); 
+2

尽可能避免使用Response.End()。它抛出不可捕捉的异常并中止线程。最好使用`Response.SuppressContent = true; HttpContext.Current.ApplicationInstance.CompleteRequest();返回;而是。 – pawrog 2014-12-02 14:59:00

相关问题