Как скачать, а затем удалить файл в ASP.NET правильно?

Недавно я столкнулся с этой проблемой: в моем приложении я предоставляю пользователям возможность загружать несколько файлов из списка, помещая их в папку.zip, а затем загружая их. Я естественно хочу, чтобы эта папка.zip была удалена после завершения загрузки. Вот мой подход:

       try {

            Response.Clear();
            Response.ContentType = "application/zip";
            Response.AddHeader("Content-Disposition", "attachment; filename=filename.zip");
            Response.TransmitFile(archive);
            Response.Flush();
            success = success && true;

            return success;

        } catch {

            return false;

        } finally {

            System.IO.File.Delete(archive);
            Response.End();

        }

Теперь логические значения просто указывают, была ли загрузка успешной, и я не думаю, что они сейчас важны. Я подумал, как это работает, программа сначала пытается передать файл клиенту, если не возникает ошибок, он пропускает блок catch и только после его загрузки удалит archive файл.

Тем не менее, я часто получаю сообщение об ошибке The process cannot access the file because it is being used by another process. на линии System.IO.File.Delete(archive);, Это происходит не каждый раз, насколько я вижу, это довольно случайно. Может ли кто-нибудь намекнуть мне на решение?

1 ответ

 Response.ContentType = ContentType;
    Response.AppendHeader("Content-Disposition",
                    "attachment; filename=myFile.txt");
    Response.WriteFile(Server.MapPath("~/uploads/myFile.txt"));
    Response.Flush();
    System.IO.File.Delete(Server.MapPath("~/uploads/myFile.txt"));
    Response.End();
Другие вопросы по тегам