Asp.net 在Response.WriteFile()中使用文件后,何时可以删除该文件?
WriteFile调用是否正确同步,我可以删除调用后立即写入的文件吗?如果内存可用,它是同步的,其他响应命令也是同步的。如果使用Asp.net 在Response.WriteFile()中使用文件后,何时可以删除该文件?,asp.net,Asp.net,WriteFile调用是否正确同步,我可以删除调用后立即写入的文件吗?如果内存可用,它是同步的,其他响应命令也是同步的。如果使用RESPONSE.WriteFile()向客户端写入文件,则调用RESPONSE.Flush()将确保它已完全输出到客户端。完成后,您可以将其从Web服务器上删除 如果文件是任务关键型的,那么您可能需要设计一个更健壮的系统。例如,一个客户端脚本,用于验证文件是否已正常接收,然后通知Web服务器该文件可以删除。TransmitFile 您还可以调用TransmitFile
RESPONSE.WriteFile()
向客户端写入文件,则调用RESPONSE.Flush()
将确保它已完全输出到客户端。完成后,您可以将其从Web服务器上删除
如果文件是任务关键型的,那么您可能需要设计一个更健壮的系统。例如,一个客户端脚本,用于验证文件是否已正常接收,然后通知Web服务器该文件可以删除。TransmitFile 您还可以调用TransmitFile,让IIS处理它。它实际上是由IIS在工作进程之外发送的 内存流
如果你真的很偏执,不要发送文件。将其加载到内存流(如果大小合理)并传输。然后,您可以随时删除该文件。IIS永远不会触及磁盘上的文件。这是解决方案,使用语法
Response.WriteFile(文件名)代码>,键入以下代码行:
Response.Flush();
System.IO.File.Delete(fullPathFileName);
Response.End();
它是完全同步的,您可以通过查看带有Lutz Reflector的HttpResponse.WriteFile
的实现看到这一点。您可以在调用Response.WriteFile
后立即删除该文件
您不能保证响应流已完全传输到客户端,但调用response.Flush
也不能保证这一点。因此,我认为在删除文件之前不需要调用Response.Flush
避免将文件加载到内存流中
,它不会给您带来任何好处,并且会降低内存使用成本,尤其是对于大型文件。我刚刚测试了这一点,理论上我同意,但实际上我不同意。文档表明它是同步的,但我刚刚验证了,在我的环境中(VS 2010,dev server,.Net 4),您必须调用Response.Flush,否则文件将在返回之前被删除;Response.Close();删除(路径)代码>尽可能避免使用Response.End()。它抛出不可修补的异常并中止线程。最好使用Response.SuppressContent=true;HttpContext.Current.ApplicationInstance.CompleteRequest();返回代码>取而代之。