Ich muss GEDCOM-Export in meiner Website implementieren.Response.TransmitFile und löschen Sie es nach der Übertragung
Mein .net-Code erstellt eine Datei auf dem Server, wenn der Export zu gedcom geklickt hat.
Dann muss ich es auf den Client vom Server herunterladen, sowie der Benutzer sollte gefragt werden, wo diese Datei gespeichert werden soll, was bedeutet, dass savedialog erforderlich ist.
Nachdem es heruntergeladen wurde, möchte ich diese Datei vom Server löschen.
Ich habe einen Code-Datei vom Server zum Client übertragen:
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();
von diesem LINK
aber ich bin nicht in der Lage, die Datei nach diesem Code als Response.End
endet Antwort zu löschen, so was auch immer Code geschrieben Nach dieser Zeile wird nicht ausgeführt.
Wenn ich Code, um Datei vor Response.End();
zu löschen, dann Datei wird nicht übertragen und ich bekomme einen Fehler.
Was Response.Flush tut und was Response.End tut ?? Kann mir bitte einen Unterschied mitteilen? – Radhi
Response.Flush erzwingt jede gepufferte Ausgabe (falls vorhanden), wirft aber die ThreadAbortException nicht ab - die Antwort wird noch ausgeführt. Response.End löscht, löst dann jedoch eine ThreadAbortException aus, die nicht gestoppt werden kann. Durch das Einfügen des Löschcodes in den Block "Finally" wird sichergestellt, dass er unabhängig vom Ergebnis ausgeführt wird. – Josh
Dies funktioniert nicht, wenn der Benutzer im Dateidownload-Dialogfeld auf Abbrechen klickt. Wenn das passiert, wird eine HttpException mit der Meldung "Der Remote-Host hat die Verbindung geschlossen. Der Fehlercode ist 0x800703E3." dann schlägt der Delete-Befehl im finally-Block mit einer IOException fehl - "Der Prozess kann nicht auf die Datei 'C: \ Windows \ TEMP \ tmp5CA3.tmp' zugreifen, da sie von einem anderen Prozess verwendet wird." Ich habe einen Haken (HttpException) hinzugefügt und Response.End() innerhalb des Catchs aufgerufen und das hat für mich funktioniert – Colin