سؤال

لا بد لي من تنفيذ تصدير Gedcom في موقعي.

أنشأت رمز .NET ملف واحد على الخادم عند النقر فوق التصدير إلى GEDCOM.

ثم أحتاج إلى تنزيله على العميل من الخادم ، وكذلك يجب أن يُسأل المستخدم عن مكان حفظ هذا الملف ، مما يعني أن المحفوظات مطلوبة.

بعد تنزيله ، أريد حذف هذا الملف من الخادم.

حصلت على رمز واحد لنقل الملف من الخادم إلى العميل:

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

من هذا حلقة الوصل

لكنني غير قادر على حذف الملف بعد هذا الرمز كما Response.End ينتهي الاستجابة لذلك أي رمز مكتوب بعد هذا السطر لا يتم تنفيذه.

إذا قمت بعمل رمز لحذف الملف من قبل Response.End();, ، ثم لا ينتقل الملف وأحصل على خطأ.

هل كانت مفيدة؟

المحلول

أي شيء تضعه بعد الاستجابة. لن يتم تنفيذها لأنه يلقي مفهومًا لوقف تنفيذ الصفحة في تلك المرحلة.

جرب هذا بدلاً من ذلك:

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

نصائح أخرى

إذا كان الملف صغيرًا بشكل معقول ، فيمكنك تحميله في صفيف بايت بحيث يمكنك حذف الملف مع الاستمرار في إرسال البيانات:

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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top