WriteFile调用是否正确同步,是否可以删除调用后立即写入的文件?
答案 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永远不会触及磁盘上的文件。