Porównaj ceny domen i usług IT, sprzedawców z całego świata

Response.TransmitFile i usuń go po transmisji


Muszę zaimplementować eksport GEDCOM na mojej stronie.
Mój kod .net utworzył jeden plik na serwerze, gdy kliknąłem eksport do gedcom.
Następnie muszę wgrać go do klienta z serwera oraz zapytać użytkownika gdzie zapisać ten plik czyli wymagany jest zapisany dialog.
Po pobraniu chcę usunąć ten plik z serwera.
Mam jeden kod do przesłania pliku z serwera do klienta:
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();

od tego

LINK
http://www.west-wind.com/weblog/posts/76293.aspx
ale nie mogę usunąć pliku po tym, jak ten kod
Response.End
kończy odpowiedź, więc żaden kod zapisany po tej linii nie jest wykonywany.
Jeśli wykonam kod, aby usunąć plik przed
Response.End ();
, plik nie jest przekazywany i pojawia się błąd.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wszystko, co umieścisz po Response.End, zakończy się niepowodzeniem, ponieważ zgłasza ThreadAbortException, aby zatrzymać wykonanie strony w tym momencie.
Spróbuj tego zamiast tego:
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);
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli plik jest wystarczająco mały, możesz załadować go do tablicy bajtów, aby usunąć plik, nadal będąc w stanie wysyłać dane:
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();

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się