0

最近、この問題に遭遇しました。私のアプリでは、複数のファイルを .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);。これは毎回発生するわけではありません。私が見る限り、かなりランダムです。誰かが解決策を教えてくれますか?

4

1 に答える 1

0
 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();
于 2016-08-16T09:59:03.743 に答える