很奇怪 微軟都做了些什麼?

前些天8月以前文件下載還能用,最近做了幾次windows更新就掛了!!!!!!!!

微軟你到底做了些什麼??????

文件下載的代碼如下:

using System;
using System.Web;
using System.Web.UI;
using System.IO;
using System.Threading;

namespace FileDownLoad4Net
{
 /// <summary>
 /// FileDown 的摘要說明。
 /// </summary>
 public class FileDown
 {
  private string m_strFullPath;
  private long m_lSpeed;
  private int m_iFactDownSpeed;
  private string m_strFileName;

  /// <summary>
  ///  下載頁顯示文件名
  /// </summary>
  public string FileName
  {
   get{return m_strFileName;}
   set{m_strFileName = value;}
  }
  /// <summary>
  ///  帶文件名下載路徑
  /// </summary>
  public string FullPath
  {
   get{return m_strFullPath;}
   set{m_strFullPath = value;}
  }
  /// <summary>
  /// 每秒允許下載的字節數
  /// </summary>
  public long Speed
  {
   get{return m_lSpeed;}
   set{m_lSpeed = value;}
  }

  /// <summary>
  /// 實際下載速度
  /// </summary>
  public int FactDownSpeed
  {
   get{return m_iFactDownSpeed;}
   set{m_iFactDownSpeed = value;}
  }
  /// <summary>
  /// 表示一個下載
  /// </summary>
  public FileDown()
  {
   //
   // TODO: 在此處添加構造函數邏輯
   //
  }
  /// <summary>
  /// 開始下載文件
  /// </summary>
  /// <returns></returns>
  public bool DownFile()
  {
   return DownFile(this.FileName,this.FullPath,this.Speed);
  }
  /// <summary>
  ///  開始下載文件
  /// </summary>
  /// <param name="p_strFileName">下載頁顯示文件名</param>
  /// <param name="p_strFullPath">帶文件名下載路徑</param>
  /// <param name="p_lSpeed">每秒允許下載的字節數</param>
  /// <returns></returns>
  public bool DownFile(string p_strFileName,string p_strFullPath, long p_lSpeed)
  {
   bool bRtn = false;

   System.Web.UI.Page p_page = (Page)System.Web.HttpContext.Current.Handler;

   //try1
   try
   {
    #region "try1"
    FileStream myFile = new FileStream(p_strFullPath, FileMode.Open,
     FileAccess.Read, FileShare.ReadWrite);
    BinaryReader br = new BinaryReader(myFile);
    //try2
    try
    {      
     #region "try2"
     //p_page.Response.Clear();
     p_page.Response.AppendHeader("Accept-Ranges", "bytes");
     p_page.Response.BufferOutput = false;
     long fileLength = myFile.Length;
     long startBytes = 0;

     int pack = 10240; //10K bytes
     //int sleep = 200; //每秒5次 即5*10K bytes每秒
     int sleep = (int)Math.Floor(1000 * pack / p_lSpeed) + 1;

     if (p_page.Request.Headers["Range"] != null)
     {
      p_page.Response.StatusCode = 206;
      string[] range = p_page.Request.Headers["Range"].Split(new char[] {'=', '-'});
      startBytes = Convert.ToInt64(range[1]);
     }

     p_page.Response.AppendHeader("Content-Length", (fileLength - startBytes).ToString());
     if (startBytes != 0)
     {
      p_page.Response.AppendHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
     }
     p_page.Response.AppendHeader("Connection", "Keep-Alive");
     p_page.Response.ContentType = "application/octet-stream";
     p_page.Response.AppendHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(p_strFileName,System.Text.Encoding.UTF8));

     br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
     int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1;
     
     DateTime DownTimeStart = DateTime.Now;

     for (int i = 0; i < maxCount; i++)
     {
      if(i == 1)
      {
       DownTimeStart = DateTime.Now;
      }

      if (p_page.Response.IsClientConnected)
      {
       p_page.Response.BinaryWrite(br.ReadBytes(pack));
       p_page.Response.Flush();
       Thread.Sleep(sleep);
       //開始計算時間
       bRtn = true;
      }
      else
      {
       maxCount = i;
       bRtn = false;
       break;
      }
     }
     #endregion
     System.TimeSpan tsDownTimeLen = DateTime.Now -DownTimeStart;
     this.FactDownSpeed = (int)Math.Floor((int) Math.Floor((startBytes + maxCount * pack ) / tsDownTimeLen.TotalSeconds) / 1024);
    }
    catch
    {
     bRtn = false;
    }
    finally
    {      
     p_page.Response.Flush();
     br.Close();
     myFile.Close();      
    }
    #endregion     
   }
   catch
   {
    bRtn = false;
   }

   return bRtn;
  }

 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章