我何时可以在Response.WriteFile()中使用它后删除文件?

时间:2008-10-14 12:13:04

标签: asp.net

WriteFile调用是否正确同步,是否可以删除调用后立即写入的文件?

5 个答案:

答案 0 :(得分:9)

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

如果文件是关键任务,您可能想要一个更强大的系统。比如,用于验证文件是否已收到的客户端脚本,然后警告网络服务器该文件可以删除。

答案 1 :(得分:5)

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

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

答案 2 :(得分:4)

它是完全同步的,你可以通过查看HttpResponse.WriteFile与Lutz Reflector的实现来看到。您可以在调用Response.WriteFile

后立即删除该文件

您无法保证响应流已完全传输到客户端,但调用Response.Flush也不能为您提供保证。所以我认为在删除文件之前不需要调用Response.Flush

避免将文件加载到MemoryStream,它不会带来任何好处,并且会占用内存,特别是对于大文件。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

<强>的TransmitFile

您也可以调用TransmitFile让IIS来处理它。它实际上是由IIS在您的工作进程之外发送的。

记忆流

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