1

誰かがこれを知っているのだろうか。

asp.netvbWebアプリでかなり厳しいエラーが発生していました。キーボードに頭をぶつけたために、額にQWERTY配列がほぼ刺繍されていたと言います。しかし、私はエラーの原因を理解したと思います:

私は次のコードを持っています:

 fileToDownload = createFileSet(fileToDownload, confirm)
                    HttpContext.Current.Response.ClearContent()
                    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileToDownload.Name)
                    HttpContext.Current.Response.AddHeader("Content-Length", fileToDownload.Length.ToString())
                    HttpContext.Current.Response.ContentType = ReturnExtension(fileToDownload.Extension.ToLower())
                    HttpContext.Current.Response.TransmitFile(fileToDownload.FullName)
                    HttpContext.Current.ApplicationInstance.CompleteRequest()
                    Directory.Delete("C:\temp_" & confirm, True)
                    'System.IO.File.Delete(fileToDownload.FullName) <--- Error here

その最後の行にコメントを付けると、本当に醜いエラーが発生します(やり直して綴ることができますが、どのようなエラーですが、実際には問題ではありません)。

原因はわかっていると思います。ユーザーがファイルをダウンロードしている、または処理中などで、プログラムがファイルを削除しようとしています...エラーが発生します。

いくつかを作成する方法はありますかon HttpContext.Current.Response.TransmitFile.complete(コードを作成)、またはバッチファイルとWindowsスケジューラを使用して、不要になったこれらのファイルをクリーンアップしますか?

私の誤りの結論は正しいと思いますか?「イベント中」を作成する方法は実際にはわかりませんが、asp.netの初心者であるため、確実に知ることはできません。

4

1 に答える 1

0

finally ブロックを使用してみてください (ここからアイデアを得ましたhttp://forums.asp.net/t/1436818.aspx/1 )。つまり、これを行う...

try {
 fileToDownload = createFileSet(fileToDownload, confirm)
                    HttpContext.Current.Response.ClearContent()
                    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileToDownload.Name)
                    HttpContext.Current.Response.AddHeader("Content-Length", fileToDownload.Length.ToString())
                    HttpContext.Current.Response.ContentType = ReturnExtension(fileToDownload.Extension.ToLower())
                    HttpContext.Current.Response.TransmitFile(fileToDownload.FullName)
                    HttpContext.Current.ApplicationInstance.CompleteRequest()
                    Directory.Delete("C:\temp_" & confirm, True)
} finally {
    System.IO.File.Delete(fileToDownload.FullName)
}

または、次のようにします。

zip ファイルの内容をメモリ ストリームに読み込み、ファイルを削除してから、メモリ ストリームを応答バッファにプッシュすることができます。私が見ることができる唯一の問題は、ダウンロードが失敗し、もう一度試してみたい場合です. とにかく、ファイルとメモリ ストリームを処理し、それを応答バッファにプッシュする方法を示す投稿があります

于 2012-08-22T16:05:28.923 に答える