當(dāng)前位置:
首頁(yè) >
利用线程下载网页中的程序并另存到本地
發(fā)布時(shí)間:2025/3/15
60
豆豆
生活随笔
收集整理的這篇文章主要介紹了
利用线程下载网页中的程序并另存到本地
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前臺(tái)頁(yè)面要輸入下載地址和另存路徑 private void BtnDown_Click(object sender, System.EventArgs e)
{
//開(kāi)始線(xiàn)程下載文件
DownloadClass downFile =new DownloadClass();
downThread = new Thread(new ThreadStart(downFile.DownloadFile));
downFile.StrUrl = txtFromUrl.Text;
downFile.StrFileName = txtSavePath.Text;
downThread.Start();
} 下載并保存下載文件的類(lèi) using System;
using System.IO;
using System.Net;
namespace HGJ.DBA
{
/**////<summary>
/// DownloadClass 的摘要說(shuō)明。
///</summary>
public class DownloadClass
{
//打開(kāi)上次下載的文件或新建文件
public string StrUrl;//文件下載網(wǎng)址
public string StrFileName;//下載文件保存地址
public string strError;//返回結(jié)果
public long lStartPos =0; //返回上次下載字節(jié)
public long lCurrentPos=0;//返回當(dāng)前下載字節(jié)
public long lDownloadFile;//返回當(dāng)前下載文件長(zhǎng)度
public void DownloadFile()
{
System.IO.FileStream fs;
if (System.IO.File.Exists(StrFileName))
{
fs= System.IO.File.OpenWrite(StrFileName);
lStartPos=fs.Length;
fs.Seek(lStartPos,System.IO.SeekOrigin.Current);
//移動(dòng)文件流中的當(dāng)前指針
}
else
{
fs = new System.IO.FileStream(StrFileName,System.IO.FileMode.Create);
lStartPos =0;
}
//打開(kāi)網(wǎng)絡(luò)連接
try
{
System.Net.HttpWebRequest request =(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(StrUrl);
long length=request.GetResponse().ContentLength;
lDownloadFile=length;
if (lStartPos>0)
request.AddRange((int)lStartPos); //設(shè)置Range值
//向服務(wù)器請(qǐng)求,獲得服務(wù)器回應(yīng)數(shù)據(jù)流
System.IO.Stream ns= request.GetResponse().GetResponseStream();
//這里可直接將獲取到的下載數(shù)據(jù)存入數(shù)據(jù)庫(kù),傳遞:nbytes 即可對(duì)應(yīng)Image類(lèi)型
byte[] nbytes = new byte[512];
int nReadSize=0;
nReadSize=ns.Read(nbytes,0,512);
while( nReadSize >0)
{
fs.Write(nbytes,0,nReadSize);
nReadSize=ns.Read(nbytes,0,512);
lCurrentPos=fs.Length;
}
fs.Close();
ns.Close();
strError="下載完成";
}
catch(Exception ex)
{
fs.Close();
strError="下載過(guò)程中出現(xiàn)錯(cuò)誤:"+ ex.ToString();
}
}
}
}
{
//開(kāi)始線(xiàn)程下載文件
DownloadClass downFile =new DownloadClass();
downThread = new Thread(new ThreadStart(downFile.DownloadFile));
downFile.StrUrl = txtFromUrl.Text;
downFile.StrFileName = txtSavePath.Text;
downThread.Start();
} 下載并保存下載文件的類(lèi) using System;
using System.IO;
using System.Net;
namespace HGJ.DBA
{
/**////<summary>
/// DownloadClass 的摘要說(shuō)明。
///</summary>
public class DownloadClass
{
//打開(kāi)上次下載的文件或新建文件
public string StrUrl;//文件下載網(wǎng)址
public string StrFileName;//下載文件保存地址
public string strError;//返回結(jié)果
public long lStartPos =0; //返回上次下載字節(jié)
public long lCurrentPos=0;//返回當(dāng)前下載字節(jié)
public long lDownloadFile;//返回當(dāng)前下載文件長(zhǎng)度
public void DownloadFile()
{
System.IO.FileStream fs;
if (System.IO.File.Exists(StrFileName))
{
fs= System.IO.File.OpenWrite(StrFileName);
lStartPos=fs.Length;
fs.Seek(lStartPos,System.IO.SeekOrigin.Current);
//移動(dòng)文件流中的當(dāng)前指針
}
else
{
fs = new System.IO.FileStream(StrFileName,System.IO.FileMode.Create);
lStartPos =0;
}
//打開(kāi)網(wǎng)絡(luò)連接
try
{
System.Net.HttpWebRequest request =(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(StrUrl);
long length=request.GetResponse().ContentLength;
lDownloadFile=length;
if (lStartPos>0)
request.AddRange((int)lStartPos); //設(shè)置Range值
//向服務(wù)器請(qǐng)求,獲得服務(wù)器回應(yīng)數(shù)據(jù)流
System.IO.Stream ns= request.GetResponse().GetResponseStream();
//這里可直接將獲取到的下載數(shù)據(jù)存入數(shù)據(jù)庫(kù),傳遞:nbytes 即可對(duì)應(yīng)Image類(lèi)型
byte[] nbytes = new byte[512];
int nReadSize=0;
nReadSize=ns.Read(nbytes,0,512);
while( nReadSize >0)
{
fs.Write(nbytes,0,nReadSize);
nReadSize=ns.Read(nbytes,0,512);
lCurrentPos=fs.Length;
}
fs.Close();
ns.Close();
strError="下載完成";
}
catch(Exception ex)
{
fs.Close();
strError="下載過(guò)程中出現(xiàn)錯(cuò)誤:"+ ex.ToString();
}
}
}
}
轉(zhuǎn)載于:https://www.cnblogs.com/ShenJH/archive/2011/11/03/2235089.html
總結(jié)
以上是生活随笔為你收集整理的利用线程下载网页中的程序并另存到本地的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VSCode工具常用命令总结
- 下一篇: java static method_j