c#使用线程下载文件的控制技巧和缺陷

技巧|控制|下载

//c#使用线程下载文件的控制技巧和缺陷

//系统引用//定义线程公共变量//开始线程下载文件//中止线程下载

//系统引用

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Text;
using System.Threading;
using System.Data;

//定义线程公共变量
  public System.Threading.Thread thread001;
  public System.Threading.Thread thread002;

   //开始线程下载文件

private void button7_Click(object sender, System.EventArgs e)
  {
   //开始线程下载文件
   DownloadClass a=new DownloadClass(); 
   thread001= new Thread(new ThreadStart(a.DownloadFile));
   a.StrUrl=textBox1.Text;
   a.StrFileName=textBox2.Text;   
   thread001.Start();
   DownloadClass b=new DownloadClass(); 
   thread002= new Thread(new ThreadStart(b.DownloadFile));
   b.StrUrl=textBox3.Text;
   b.StrFileName=textBox4.Text;   
   thread002.Start();
  }

   //中止线程下载

private void button5_Click(object sender, System.EventArgs e)
  {
   //中止线程下载
   thread001.Abort();  
   thread002.Abort();
   MessageBox.Show("线程已经中止!","警告!");
   
  }

//定义下载文件类.线程传参数用

  public class DownloadClass
  {  
   //打开上次下载的文件或新建文件
   public string StrUrl;//文件下载网址
   public string StrFileName;//下载文件保存地址
   public string strError;//返回结果
   public long lStartPos =0; //返回上次下载字节
   public long lCurrentPos=0;//返回当前下载字节
   public long lDownloadFile;//返回当前下载文件长度

   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);
     //移动文件流中的当前指针
    }
    else
    {
     fs = new System.IO.FileStream(StrFileName,System.IO.FileMode.Create);
     lStartPos =0;
    }

    //打开网络连接
    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); //设置Range值
    
     //向服务器请求,获得服务器回应数据流
     System.IO.Stream ns= request.GetResponse().GetResponseStream();
    
     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="下载过程中出现错误:"+ ex.ToString();
    
    }
  
   }
  } 
  //定义下载类结束 

时间: 2024-08-31 14:40:15

c#使用线程下载文件的控制技巧和缺陷的相关文章

请问谁有winform程序用后台线程下载文件的例子

问题描述 请问谁有winform程序用后台线程下载文件的例子 请问谁有winform出现用后台线程下载文件的例子,带进度条了

asp.net BackgroundWorker之在后台下载文件_实用技巧

示例: 下面的代码示例演示如何使用 BackgroundWorker 组件从 URL 加载 XML 文件.用户单击"下载"按钮时,Click 事件处理程序将调用 BackgroundWorker 组件的 RunWorkerAsync 方法来启动下载操作.在下载过程中,将禁用该按钮,然后在下载完成后再启用该按钮.MessageBox 将显示文件的内容. 复制代码 代码如下: using System; using System.Collections.Generic; using Sys

php强制下载文件函数_php技巧

本文实例为大家分享了php强制下载文件函数,供大家参考,具体内容如下 public function down() { $id = $this->_get('id'); $M = M("downloads"); $data=$M->where("id=$id and status=1")->find(); !$data && exit; $filename = iconv('UTF-8','GBK',$data['filename'

Java 多线程断点下载文件_详解

基本原理:利用URLConnection获取要下载文件的长度.头部等相关信息,并设置响应的头部信息.并且通过URLConnection获取输入流,将文件分成指定的块,每一块单独开辟一个线程完成数据的读取.写入.通过输入流读取下载文件的信息,然后将读取的信息用RandomAccessFile随机写入到本地文件中.同时,每个线程写入的数据都文件指针也就是写入数据的长度,需要保存在一个临时文件中.这样当本次下载没有完成的时候,下次下载的时候就从这个文件中读取上一次下载的文件长度,然后继续接着上一次的位

使用java实现http多线程断点下载文件(一)_java

基本原理:利用URLConnection获取要下载文件的长度.头部等相关信息,并设置响应的头部信息.并且通过URLConnection获取输入流,将文件分成指定的块,每一块单独开辟一个线程完成数据的读取.写入.通过输入流读取下载文件的信息,然后将读取的信息用RandomAccessFile随机写入到本地文件中.同时,每个线程写入的数据都文件指针也就是写入数据的长度,需要保存在一个临时文件中.这样当本次下载没有完成的时候,下次下载的时候就从这个文件中读取上一次下载的文件长度,然后继续接着上一次的位

想将数百个小文件分成多线程,每线程下载多个文件,不知写对没?

也是按自己的想法去实现的. 每个线程下载完分配的文件之后,就退出来. 感觉是比单个下载快,但如何提高了性能,现在只能是看时间. 至于在下载什么...真是不好细说,哈哈哈..私用,私用. from BeautifulSoup import BeautifulSoup import urllib2,urllib import os,sys,time,re from threading import Thread local_proxies = {'http': 'http://131.139.58.

C#用线程传参下载文件的代码

下载 using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Net; using System.IO;using System.Text;using System.Threading; private void button6_Click(object sender, System.EventArg

迅雷离线下载怎么取回文件的小技巧

迅雷离线下载怎么取回文件的小技巧: 在迅雷应用那里,有个迅雷离线,点进去后选你要取回的资源,然后有个本地取回就行了.一般你在下载过程中,点击离线下载,它离线下载后会自动帮你取回的. 显示云端下载完成等待取回的字样,就点开左边的离线下载,再选好文件点蓝色按钮下载 相关问题阅读:如何将离线下载"云"端的任务取回本地? 答:选中下载完成的任务,然后点击"下载到本地",就可通过迅雷客户端将该文件下载到您的电脑上.您还可以右键单击下载任务,选择"目标另存为"

PHP实现从远程下载文件的方法_php技巧

本文实例讲述了PHP实现从远程下载文件的方法.分享给大家供大家参考.具体实现方法如下: <?php if ($_GET[xfer]) { if ($_POST[from] == "") { print "You forgot to enter a url."; } else { copy("$_POST[from]", "$_POST[to]"); $size = round((filesize($_POST[to])/