源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#同步、异步远程下载文件实例

  • 时间:2021-04-24 12:31 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#同步、异步远程下载文件实例
[b]1、使用HttpWebRequest/HttpWebResonse和WebClient [/b]
[u]复制代码[/u] 代码如下:
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(); }
[b]2、使用WebClient [/b]
[u]复制代码[/u] 代码如下:
string url = "http://www.mozilla.org/images/feature-back-cnet.png"; WebClient myWebClient = new WebClient(); myWebClient.DownloadFile(url,"C:\\temp\\feature-back-cnet.png");
[b]3、异步下载例子[/b]
[u]复制代码[/u] 代码如下:
        ///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);             }         }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部