Как скачать, а затем удалить файл в 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();