static void Main(string[] args)
{
string filePath = @"c:\aa.zip";
string url = "https://www.xxxx.cn/xxxxx.zip";
long startPos = 0;
FileStream fs;
// 1. 開啟或建立本地檔案
if (File.Exists(filePath))
{
fs = File.OpenWrite(filePath);
startPos = fs.Length;
fs.Seek(startPos, SeekOrigin.Current); // 移至檔案尾端
}
else
{
fs = new FileStream(filePath, FileMode.Create);
startPos = 0;
}
try
{
// 2. 建立 HTTP 請求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
if (startPos > 0)
request.AddRange((int)startPos); // 關鍵:設定 Range 標頭
// 3. 取得回應串流
using (Stream ns = request.GetResponse().GetResponseStream())
{
byte[] buffer = new byte[512];
int readSize;
while ((readSize = ns.Read(buffer, 0, buffer.Length)) > 0)
{
fs.Write(buffer, 0, readSize);
}
}
fs.Close();
Console.WriteLine("下載完成");
}
catch (Exception ex)
{
fs.Close();
Console.WriteLine("下載錯誤: " + ex.ToString());
}
}
請求標頭加入 Range: bytes=1024- 表示從第 1024 位元組開始傳輸。HttpWebRequest.AddRange 方法封裝此功能。
Seek(offset, SeekOrigin.Current):移動讀寫指標至檔案末尾OpenWrite:開啟既有檔案進行附加寫入