我在服务器上保存了一个Excel文档,我需要将有对文档的下载功能,我以前写的这个方法在别的地方没有问题,但是移植的时候在  Response.End();出现异常了,“ Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack”,大侠指点下    public void download()
        {
            string fileName = "RawData" + ".xls";
            //清空输出流
            Response.Clear();
            //在http头中加入文件名信息
            Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
            //定义输出流为mime类型为
            Response.ContentType = "application/x-xls";
            //从磁盘中读取文件
            string FileFolder = Server.MapPath("Excel File");
            System.IO.FileStream fs = System.IO.File.OpenRead(FileFolder + "\\" + fileName);
            //定义缓冲区大小
            byte[] buffer = new byte[1024];
            //第一次读取
            int i = fs.Read(buffer, 0, buffer.Length);
            //如果读取的字节大于0,则使用binaryWrite()不断向客户端输出文件流
            while (i > 0)
            {
                Response.BinaryWrite(buffer);
                i = fs.Read(buffer, 0, buffer.Length);
            }
            //关闭磁盘文件流
            fs.Close();
            //关闭输出流
            Response.End();
        }
     

解决方案 »

  1.   

    直接Response.WriteFile就行了.
      

  2.   

    cnblogs上去搜索一下。肯定有答案
      

  3.   

    讲文件地址做参数传递到这个画面
    画面代码using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.IO;
    using CrystalDecisions.Shared;
    using CrystalDecisions.CrystalReports.Engine;
    using System.Reflection;
    using System.Diagnostics;public partial class WebForms_Hospital_Default :PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                string strPath = Request["Path"].ToString().Trim();
                DownloadFile(Page.Response, strPath);
            }
            catch (Exception ex)
            {
                this.ShowMessage(ex.Message);
            }
        }    #region 下载服务器上的文件
        /// <summary>
        /// 下载服务器上的文件
        /// </summary>
        /// <param name="PageResponse">程序中可以设置参数:HttpResponse ht=Page.Response;</param>
        /// <param name="serverPath">服务器上的文件路径</param>
        public void DownloadFile(HttpResponse response, string serverPath)
        {
            FileStream fs = null;
            try
            {
                fs = File.OpenRead(serverPath);
                byte[] buffer = new byte[1024];
                long count = 1024;
                response.Buffer = true;
                response.AddHeader("Connection", "Keep-Alive");
                response.ContentType = "application/octet-stream";
                response.AddHeader("Content-Disposition", "attachment;filename=" + Path.GetFileName(serverPath));//下载时要保存的默认文件名
                response.AddHeader("Content-Length", fs.Length.ToString());
                while (count == 1024)
                {
                    count = fs.Read(buffer, 0, 1024);
                    response.BinaryWrite(buffer);
                }
            }
            catch
            {
            }
            finally
            {
                fs.Close();
            }
        }
        #endregion
    }