Réponse.TransmitFile et le supprimer après transmission
- Je mettre en place GEDCOM à l'exportation dans mon site.
Mon .net code créé un fichier sur le serveur lors de l'export au format gedcom cliqué.
Puis-je besoin de le télécharger pour le client à partir du serveur, ainsi que de l'utilisateur doit être demandé à l'emplacement où enregistrer le fichier, sens savedialog est nécessaire.
Après qu'il est téléchargé, je veux supprimer ce fichier à partir du serveur.
J'ai eu un code pour transmettre le fichier à partir du serveur vers le client:
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();
de cette LIEN
mais je ne suis pas en mesure de supprimer le fichier après ce code comme Response.End
se termine réponse, de sorte que quel que soit le code écrit après que la ligne n'est pas l'exécuter.
Si je fais le code pour supprimer le fichier avant de Response.End();
, puis fichier n'a pas transmis et j'obtiens une erreur.
OriginalL'auteur Radhi | 2010-04-22
Vous devez vous connecter pour publier un commentaire.
Quelque chose que vous mettez après la Réponse.La fin ne sera pas exécuté, car il jette un ThreadAbortException pour arrêter l'exécution de la page à ce point.
Essayez plutôt ceci:
Réponse.Rincer les forces de tout tampon de sortie (si elles existent), mais ne pas jeter le ThreadAbortException - la réponse est toujours en cours. Réponse.La fin de bouffées de chaleur mais jette alors un ThreadAbortException qui ne peut pas être arrêté. Mettre le code de suppression dans le bloc finally assure qu'il va courir, peu importe ce que le résultat.
Cela ne veut pas gérer la situation lorsque l'utilisateur clique sur Annuler dans la boîte de dialogue de téléchargement. Lorsque cela se produit, un HttpException est levée avec le message "L'hôte distant a fermé la connexion. Le code d'erreur est 0x800703E3.", puis dans le bloc finally la Suppression échoue avec une IOException - "Le processus ne peut pas accéder au fichier 'C:\Windows\TEMP\tmp5CA3.tmp" parce qu'il est utilisé par un autre processus." J'ai ajouté une capture (HttpException) et appelle une Réponse.Fin() à l'intérieur de la prise et qui a fonctionné pour moi
OriginalL'auteur Josh
Si le fichier est raisonnablement petit, vous pouvez le charger dans un tableau d'octets, de sorte que vous pouvez supprimer le fichier tout en étant capable d'envoyer les données:
Pas vraiment. BinaryWrite est plus rapide bien sûr, comme vous avez déjà les données dans la mémoire, mais avec le chargement des données, il fait la même chose que TransmitFile.
OriginalL'auteur Guffa