public void Start_load(int number,string url,string path1) { downornot = true; strurl = url; GetPath(path1); GetURLType(url); GetFileName(url); setfilename = path+true_filename + "set." + "txt"; if (File.Exists(setfilename)) { Console.WriteLine("exist"); Restart_load(); } else { Console.WriteLine("not exist"); dt = DateTime.Now;//开始接收时间 HttpWebRequest request; long filesize = 0; downloadcontrol downcontrol = new downloadcontrol(this); //set speed etc. testspeed = new Thread(downcontrol.set); testspeed.Start(); try { request = (HttpWebRequest)HttpWebRequest.Create(strurl); filesize = request.GetResponse().ContentLength;//取得目标文件的长度 DownLoadsize = filesize; request.Abort(); } catch (Exception er) { //MessageBox.Show (er.Message ); } // 接收线程数 thread = number; //根据线程数初始化数组 threadw = new bool[thread]; filenamew = new string[thread]; filestartw = new long[thread]; filesizew = new long[thread]; //计算每个线程应该接收文件的大小 long filethread = filesize / thread;//平均分配 long filethreade = filesize - filethread * (thread - 1);//剩余部分由最后一个线程完成 //为数组赋值 for (int i = 0; i < thread; i++) { threadw[i] = false;//每个线程状态的初始值为假 filenamew[i] = path+true_filename + i.ToString() + ".dat";//每个线程接收文件的临时文件名 if (i < thread - 1) { filestartw[i] = filethread * i;//每个线程接收文件的起始点 filesizew[i] = filethread - 1;//每个线程接收文件的长度 } else { filestartw[i] = filethread * i; filesizew[i] = filethreade - 1; } } //保存到文件 FileStream setfs; setfs = new FileStream(path+true_filename + "set." + "txt", System.IO.FileMode.Create); StreamWriter sw = new StreamWriter(setfs); sw.WriteLine(strurl); sw.WriteLine(thread); sw.WriteLine(path); for (int i = 0; i < thread; i++) { sw.WriteLine(filenamew[i]);//每个线程接收文件的文件名 sw.WriteLine(filestartw[i]);//每个线程接收文件的起始位置 sw.WriteLine(filesizew[i]);//每个线程接收文件的大小 sw.WriteLine(threadw[i]); } sw.WriteLine(dt); //清空缓冲区 sw.Flush(); //关闭流 sw.Close(); setfs.Close(); //定义线程数组,启动接收线程 threadk = new Thread[thread]; httpfile = new HttpFile[thread]; for (int j = 0; j < thread; j++) { httpfile[j] = new HttpFile(this, j); threadk[j] = new Thread(new ThreadStart(httpfile[j].receive)); threadk[j].Start(); } //启动合并各线程接收的文件线程 hbth = new Thread(new ThreadStart(hbfile)); hbth.Start(); } }
public void Restart_load() { HttpWebRequest request; request = (HttpWebRequest)HttpWebRequest.Create(strurl); DownLoadsize= request.GetResponse().ContentLength;//取得目标文件的长度 request.Abort(); StreamReader sw = new StreamReader(path+true_filename + "set." + "txt"); strurl=sw.ReadLine(); thread=Convert.ToInt32(sw.ReadLine()); path = sw.ReadLine(); //根据线程数初始化数组 threadw = new bool[thread]; filenamew = new string[thread]; filestartw = new long[thread]; filesizew = new long[thread]; for (int i = 0; i < thread; i++) { filenamew[i]=sw.ReadLine();//每个线程接收文件的文件名 filestartw[i]=Convert.ToInt32(sw.ReadLine());//每个线程接收文件的起始位置 filesizew[i] = Convert.ToInt32(sw.ReadLine());//每个线程接收文件的大小 threadw[i] = Convert.ToBoolean(sw.ReadLine()); Console.WriteLine(filenamew[i]+filesizew[i].ToString()); } dt = Convert.ToDateTime(sw.ReadLine()); sw.Close(); Console.ReadLine(); threadk = new Thread[thread]; httpfile = new HttpFile[thread]; for (int j = 0; j < thread; j++) { httpfile[j] = new HttpFile(this, j); threadk[j] = new Thread(new ThreadStart(httpfile[j].receive)); threadk[j].Start(); } downloadcontrol downcontrol = new downloadcontrol(this); testspeed = new Thread(downcontrol.set); testspeed.Start(); //启动合并各线程接收的文件线程 hbth = new Thread(new ThreadStart(hbfile)); hbth.Start(); }