System.IO.Stream iStream = null;
// 讀取區塊中 10K 位元組的緩衝區:
位元組[]緩衝區=新位元組[10240];
// 檔案長度:
整數長度;
// 要讀取的總位元組數:
長數據讀取;
// 標識要下載的文件,包括其路徑。
string filepath = @"E:softwareSQL Server 2000 個人版.ISO";
// 識別檔案名稱。
字串檔名 = System.IO.Path.GetFileName(檔案路徑);
嘗試
{
// 開啟檔案。
iStream = new System.IO.FileStream(檔案路徑, System.IO.FileMode.Open,
System.IO.FileAccess.Read、System.IO.FileShare.Read);
Response.Clear();
// 要讀取的總位元組數:
dataToRead = iStream.Length;
長 p = 0;
if(Request.Headers["範圍"]!=null)
{
響應.StatusCode = 206;
p = long.Parse(Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
}
如果(p!= 0)
{
Response.AddHeader("內容範圍","位元組" + p.ToString() + "-" + ((long)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());
}
Response.AddHeader("內容長度",((long)(dataToRead-p)).ToString());
Response.ContentType = "應用程式/八位元組流";
Response.AddHeader("Content-Disposition", "附件; filename=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));
iStream.Position = p;
待讀資料 = 待讀資料 - p;
// 讀取位元組。
while (要讀取的資料 > 0)
{
// 驗證客戶端是否已連線。
if (Response.IsClientConnected)
{
// 讀取緩衝區中的資料。
長度 = iStream.Read(緩衝區, 0, 10240);
// 將資料寫入目前輸出流。
Response.OutputStream.Write(緩衝區, 0, 長度);
// 將資料刷新到 HTML 輸出。
回應.Flush();
緩衝區=新位元組[10240];
待讀資料=待讀資料-長度;
}
別的
{
//防止使用者在斷開連線時無限循環
待讀資料=-1;
}
}
}
catch(異常前)
{
// 捕獲錯誤(如果有)。
Response.Write("錯誤:" + ex.Message);
}
最後
{
if (iStream != null)
{
//關閉檔案。
iStream.Close();
}
響應.End();
}