Pregunta

Tengo que aplicar GEDCOM de exportación en mi sitio.

Mi código .NET crea un archivo en el servidor cuando la exportación a GEDCOM se ha hecho clic.

Entonces necesito para descargarlo desde el servidor al cliente, así como el usuario debe pedir dónde guardar ese archivo, es decir, se requiere SaveDialog.

Después de que se haya descargado, quiero borrar ese archivo desde el servidor.

Tengo un código de transmisión de archivos del servidor al cliente:

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

ENLACE

pero no soy capaz de eliminar el archivo después de este código como extremos Response.End de respuesta por lo que cualquier código escrito después de que la línea no se ejecuta.

Si lo hago código para borrar archivo antes Response.End();, a continuación, el archivo no se transmite y me da un error.

¿Fue útil?

Solución

Cualquier cosa se pone después Response.End no se ejecutan porque arroja una ThreadAbortException a la ejecución de parada de la página en ese punto.

Pruebe esto en su lugar:

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);
}

Otros consejos

Si el archivo es razonablemente pequeño, puede cargarlo en una matriz de bytes para que pueda eliminar el archivo al mismo tiempo ser capaz de enviar los datos:

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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top