मुझे अपनी साइट में GEDCOM निर्यात को लागू करना होगा।Response.TransmitFile और ट्रांसमिशन के बाद इसे हटाएं
मेरे .NET कोड ने सर्वर पर एक फ़ाइल बनाई जब gedcom पर क्लिक किया गया।
फिर मुझे इसे सर्वर से क्लाइंट में डाउनलोड करने की आवश्यकता है, साथ ही उपयोगकर्ता से पूछा जाना चाहिए कि उस फ़ाइल को कहां से सहेजना है, जिसका अर्थ है सहेजे गए हैं।
डाउनलोड होने के बाद, मैं उस फ़ाइल को सर्वर से हटाना चाहता हूं।
मैं ग्राहक के लिए सर्वर से फ़ाइल संचारित करने के लिए एक कोड मिला: इस LINK
से
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();
लेकिन मैं Response.End
के रूप में इस कोड के बाद फ़ाइल को नष्ट कर पा रहा हूँ प्रतिक्रिया इतनी जो कुछ कोड लिखा समाप्त होता है उस पंक्ति के बाद निष्पादित नहीं है।
यदि मैं Response.End();
से पहले फ़ाइल को हटाने के लिए कोड करता हूं, तो फ़ाइल प्रेषित नहीं होती है और मुझे कोई त्रुटि मिलती है।
क्या प्रतिक्रिया। फ्लश करता है और क्या प्रतिक्रिया। अंत करता है ?? कृपया मुझे अंतर बता सकते हैं? – Radhi
Response.Flush किसी भी buffered आउटपुट (अगर कोई है) बाहर मजबूर करता है लेकिन ThreadAbortException फेंक नहीं देता है - प्रतिक्रिया अभी भी प्रगति पर है। Response.End flushes लेकिन फिर एक ThreadAbortException फेंकता है जिसे रोका नहीं जा सकता है। अंत में ब्लॉक में डिलीट कोड डालने से यह सुनिश्चित होता है कि इससे कोई फर्क नहीं पड़ता कि इससे कोई फर्क नहीं पड़ता। – Josh
यह उपयोगकर्ता द्वारा फ़ाइल डाउनलोड संवाद में रद्द होने पर स्थिति को संभाल नहीं करता है। जब ऐसा होता है तो संदेश के साथ एक HttpException फेंक दिया जाता है "रिमोट होस्ट ने कनेक्शन बंद कर दिया। त्रुटि कोड 0x800703E3 है।" फिर अंत में ब्लॉक को हटाएं IOException के साथ विफल रहता है - "प्रक्रिया फ़ाइल 'C: \ Windows \ TEMP \ tmp5CA3.tmp' तक नहीं पहुंच सकती है क्योंकि इसका उपयोग किसी अन्य प्रक्रिया द्वारा किया जा रहा है।" मैंने पकड़ के अंदर एक पकड़ (एचटीपीएक्सप्शन) जोड़ा और Response.End() कहा और यह मेरे लिए काम किया – Colin