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

Pro*_*ofK 8 asp.net

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

Kei*_*ley 9

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

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


小智 5

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

Response.Flush();
System.IO.File.Delete(fullPathFileName);
Response.End();
Run Code Online (Sandbox Code Playgroud)

  • 尽可能避免使用Response.End().它抛出无法捕获的异常并中止线程.最好使用`Response.SuppressContent = true; HttpContext.Current.ApplicationInstance.CompleteRequest(); 返回; (2认同)

Joe*_*Joe 4

HttpResponse.WriteFile它是完全同步的,您可以通过查看Lutz Reflector的实现来看到这一点。您可以在调用 后立即删除该文件Response.WriteFile

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

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

  • 我刚刚测试了这一点,理论上我同意,但实际上我不同意。文档表明它是同步的,但我刚刚验证在我的环境(VS 2010,开发服务器,.Net 4)中你必须调用**Response.Flush**,否则文件将在返回之前被删除。 (4认同)