9

自分のサイトにGEDCOMエクスポートを実装する必要があります。

gedcomへのエクスポートがクリックされたときに、私の.netコードがサーバーに1つのファイルを作成しました。

次に、サーバーからクライアントにダウンロードする必要があります。また、ユーザーはそのファイルを保存する場所を尋ねられる必要があります。つまり、savedialogが必要です。

ダウンロードした後、そのファイルをサーバーから削除したいと思います。

サーバーからクライアントにファイルを送信するための1つのコードを取得しました。

Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();

このリンクから

しかし、このコードの後に​​ファイルを削除してResponse.End応答を終了することはできないため、その行の後に記述されたコードは実行されません。

以前にファイルを削除するコードを実行するResponse.End();と、ファイルが送信されず、エラーが発生します。

4

2 に答える 2

24

Response.Endの後に置いたものは、その時点でページの実行を停止するためにThreadAbortExceptionをスローするため、実行されません。

代わりにこれを試してください:

string responseFile = Server.MapPath("~/" + FileName);

try{
    Response.ContentType = "text/xml";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
    Response.TransmitFile(responseFile);
    Response.Flush();
}
finally {
    File.Delete(responseFile);
}
于 2010-04-22T05:11:37.013 に答える
2

ファイルが適度に小さい場合は、ファイルをバイト配列にロードして、データを送信しながらファイルを削除できるようにすることができます。

Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
string path = Server.MapPath("~/" + FileName);
byte[] data = File.ReadAllBytes(path);
File.Delete(path);
Response.BinaryWrite(data);
Response.End();
于 2010-04-22T05:10:06.890 に答える