C#同步、异步远程下载文件实例_C#教程-查字典教程网
C#同步、异步远程下载文件实例
C#同步、异步远程下载文件实例
发布时间:2016-12-28 来源:查字典编辑
摘要:1、使用HttpWebRequest/HttpWebResonse和WebClient复制代码代码如下:HttpWebRequestrequ...

1、使用HttpWebRequest/HttpWebResonse和WebClient

复制代码 代码如下:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

WebResponse response = request.GetResponse();

Stream stream = response.GetResponseStream();

if (!response.ContentType.ToLower().StartsWith("text/"))

{

//Value = SaveBinaryFile(response, FileName);

byte[] buffer = new byte[1024];

Stream outStream = System.IO.File.Create(FileName);

Stream inStream = response.GetResponseStream();

int l;

do

{

l = inStream.Read(buffer, 0, buffer.Length);

if (l > 0)

outStream.Write(buffer, 0, l);

}

while (l > 0);

outStream.Close();

inStream.Close();

}

2、使用WebClient

复制代码 代码如下:

string url = "http://www.mozilla.org/images/feature-back-cnet.png";

WebClient myWebClient = new WebClient();

myWebClient.DownloadFile(url,"C:tempfeature-back-cnet.png");

3、异步下载例子

复制代码 代码如下:

///summary

///异步分析下载

///summary

private void AsyncAnalyzeAndDownload(string url, string savePath)

{

this.uriString = url;

this.savePath = savePath;

#region 分析计时开始

count = 0;

count1 = 0;

freq = 0;

result = 0;

QueryPerformanceFrequency(ref freq);

QueryPerformanceCounter(ref count);

#endregion

using (WebClient wClient = new WebClient())

{

AutoResetEvent waiter = new AutoResetEvent(false);

wClient.Credentials = CredentialCache.DefaultCredentials;

wClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(AsyncURIAnalyze);

wClient.DownloadDataAsync(new Uri(uriString), waiter);

waiter.WaitOne(); 阻止当前线程,直到收到信号

}

}

///summary

///异步分析

///summary

protected void AsyncURIAnalyze(Object sender, DownloadDataCompletedEventArgs e)

{

AutoResetEvent waiter = (AutoResetEvent)e.UserState;

try

{

if (!e.Cancelled && e.Error == null)

{

string dnDir = string.Empty;

string domainName = string.Empty;

string uri = uriString;

获得域名 [url]httpwww.sina.com[url]

Match match = Regex.Match(uri, @((http(s)))+[w-.]+[^]);, RegexOptions.IgnoreCase

domainName = match.Value;

获得域名最深层目录 [url]httpwww.sina.commail[url]

if (domainName.Equals(uri))

dnDir = domainName;

else

dnDir = uri.Substring(0, uri.LastIndexOf(''));

dnDir += '';

获取数据

string pageData = Encoding.UTF8.GetString(e.Result);

Liststring urlList = new Liststring();

匹配全路径

match = Regex.Match(pageData, @((http(s)))+((()+[w-.]+()))+[w-.]+.+( + ImageType + )); , RegexOptions.IgnoreCase

while (match.Success)

{

string item = match.Value;

短路径处理

if (item.IndexOf(http) == -1 && item.IndexOf(https) == -1)

item = (item[0] == '' domainName dnDir) + item;

if (!urlList.Contains(item))

{

urlList.Add(item);

imgUrlList.Add(item);

实时显示分析结果

AddlbShowItem(item);

边分析边下载

WebRequest hwr = WebRequest.Create(item);

hwr.BeginGetResponse(new AsyncCallback(AsyncDownLoad), hwr);

hwr.Timeout = 0x30D40; 默认 0x186a0 - 100000 0x30D40 - 200000

hwr.Method = POST;

hwr.C;

hwr.MaximumAutomaticRedirections = 3;

hwr.Accept =imagegif, imagex-xbitmap, imagejpeg, imagepjpeg, applicationx-shockwave-flash, applicationvnd.ms-excel, applicationvnd.ms-powerpoint, applicationmsword, ;

hwr.Accept = imagegif, imagex-xbitmap, imagejpeg, imagepjpeg, ;

IAsyncResult iar = hwr.BeginGetResponse(new AsyncCallback(AsyncDownLoad), hwr);

iar.AsyncWaitHandle.WaitOne();

}

match = match.NextMatch();

}

}

}

finally

{

waiter.Set();

#region 分析计时结束

QueryPerformanceCounter(ref count1);

count = count1 - count;

result = (double)(count) (double)freq;

toolStripStatusLabel1.Text = 分析完毕!;

toolStripStatusLabel2.Text = string.Format( 分析耗时{0}秒, result);

Application.DoEvents();

#endregion

分析完毕

isAnalyzeComplete = true;

}

}

/// <summary>

/// 异步接受数据

/// </summary>

/// <param name="asyncResult"></param>

public void AsyncDownLoad(IAsyncResult asyncResult)

{

#region 下载计时开始

if (cfreq == 0)

{

QueryPerformanceFrequency(ref cfreq);

QueryPerformanceCounter(ref ccount);

}

#endregion

WebRequest request = (WebRequest)asyncResult.AsyncState;

string url = request.RequestUri.ToString();

try

{

WebResponse response = request.EndGetResponse(asyncResult);

using (Stream stream = response.GetResponseStream())

{

Image img = Image.FromStream(stream);

string[] tmpUrl = url.Split('.');

img.Save(string.Concat(savePath, "/", DateTime.Now.ToString("yyyyMMddHHmmssfff"), ".", tmpUrl[tmpUrl.Length - 1]));

img.Dispose();

stream.Close();

}

allDone.Set();

//从未下载的列表中删除已经下载的图片

imgUrlList.Remove(url);

//更新列表框

int indexItem = this.lbShow.Items.IndexOf(url);

if (indexItem >= 0 && indexItem <= this.lbShow.Items.Count)

SetlbShowItem(indexItem);

}

catch (Exception)

{

imgUrlList.Remove(url);

}

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C#教程学习
    热门C#教程学习
    编程开发子分类