Search code examples
c#asp.netwritefiletransmitfile

WriteFile vs TransmitFile for large files that need to be deleted from the server after transfer


I have to trigger user downloads of large files to a webbrowser, where I create the file to transfer on the server, then delete it immediately afterwards. I've found enough examples to see that I should probably use Response.TransmitFile or Response.WriteFile... but have heard there are problems with both:

WriteFile is synchronous, but it buffers the file in memory before sending it to the user. Since I'm dealing with very large files, this could cause problems.

TransmitFile doesn't buffer locally so it does work for large files, but it is asynchronous, so I can't delete the file after calling TransmitFile. Apparently flushing the file doesn't guarantee that I can delete it either?

What is the best way of dealing with this?

There is the BinaryWrite also... could I loop through a file stream, copying it in segments?


Solution

  • Here's a good solution which uses TransmitFile but allows you to do something once it's done using a delegate:

    http://improve.dk/blog/2008/03/29/response-transmitfile-close-will-kill-your-application

    Just replace the logging at the end with file deletion.