首页 > 开发 > 综合 > 正文

看到有人用 WebClient来下载, 发篇用 WebRequest 实现有进度下载的吧.

2024-07-21 02:16:03
字体:
来源:转载
供稿:网友
 
记得以前刚用的时候,webclient确实看着挺简单,但是实现起来,小文件是一下就下载完了.

大文件要一直下载完毕才行.

后来找了找,用 webrequest 结合 webresponse 可以实现 有进度提示的,下载文件..
下面是代码..是从我一个软件中提取出来的.只取关键部分说明...
=====================================================================
     if(downloading==false) //如果无文件正在下载
     { 
      tempdown=currentfilename;
      if(currentfilename==""){tempdown=b;}
      whichdown=1;
      system.threading.thread apcthread2=new system.threading.thread(new system.threading.threadstart(downfile));
      apcthread2.start();
   
     }
     else
     {
      messagebox.show("对不起,当前正在下载文件.","提示",messageboxbuttons.ok,messageboxicon.information);
     }      
##################
大概说明下,如果当前没有文件正在下载,则启动一个新线程....下载文件.. 下面是 downfile函数的代码....
简单的地方就不做注释了.
=============================================================================
  //下载块#####################################################################################################
  private void downfile()
  {
   if(tempdown!="")
   {
   
    if(downloading==false) //如果无文件下载
    {
     long fb;
     this.apc_status_1.text="正在连接到 " + tempdown;
     downloading=true;
     try
     {
      //====尝试url有效性,以及初始化下载界面
      webrequest myre=webrequest.create(tempdown);
      webresponse mwrite=myre.getresponse();
      fb=mwrite.contentlength;
      this.apc_status_1.text="连接成功..开始下载..";
      pbar.value=0;
      pbar.maximum=(int)fb;
      pbar.visible=true;
      this.apclist.height=156;
      //====开始下载
      webclient wc=new webclient();
      savefiledialog sf=new savefiledialog();
      sf.title="请选择文件存放的位置";
      filename=currentfilename;
      sf.filename=filename.substring(filename.lastindexof("/")+1,filename.length-filename.lastindexof("/")-1);
      sf.showdialog(this);
      filename=sf.filename;
      if(filename!="")
      {
       stream srm=wc.openread(tempdown);
       streamreader srmer=new streamreader(srm);
       byte[] mbyte=new byte[fb];
       int allbyte=(int)mbyte.length;
       int startbyte=0;
       while(fb>0)  //################   循环读取文件,并显示进度.....
       {
        application.doevents();
        int m=srm.read(mbyte,startbyte,allbyte);
        if(m==0){break;}
        startbyte+=m;
        allbyte-=m;
        pbar.value+=m;
        int a1=(int)startbyte/1024;
        int a2=(int)fb/1024;
        this.apc_status_1.text="连接成功..开始下载.." + a1.tostring() + "/" + a2.tostring() + "kb";//startbyte + "/" + fb.tostring();
       }

       filestream fs = new filestream(filename,filemode.openorcreate);
       fs.write(mbyte,0,mbyte.length);
       fs.flush();


       srm.close();
       srmer.close();
       fs.close();

       this.apclist.height=170;
       pbar.visible=false;
       this.apc_status_1.text="文件下载完毕!";
      }                     


     }
     catch(webexception exp) //如地址无效或者找不到文件
     {
      messagebox.show(exp.message,"听啪啪 提示",messageboxbuttons.ok,messageboxicon.information);
     }
     downloading=false;
    }
    else
    {
     messagebox.show("对不起,当前正在下载文件.","听啪啪 提示",messageboxbuttons.ok,messageboxicon.information);
    }
   }
   else
   {
    if(whichdown==1)
    {
     messagebox.show("当前并无文件播放.","听啪啪 提示",messageboxbuttons.ok,messageboxicon.information);
    }
    else
    {
     messagebox.show("请在列表中选择好想要下载的文件.","听啪啪 提示",messageboxbuttons.ok,messageboxicon.information);
    }
   }
   
  }//下载块#####################################################################################################

最大的网站源码资源下载站,

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表