慢速VOA的下载!

看到上次一个圆子里的弟兄提到的慢速VOA,感觉还不错,但是不想一个一个下载,所以写了段代码。
好长时间都不写代码了,手生了!
现在写代码都是为了自己用!让高手见笑了!

  1using System;
  2using System.Collections.Generic;
  3using System.ComponentModel;
  4using System.Data;
  5using System.Drawing;
  6using System.Text;
  7using System.Windows.Forms;
  8using System.Net;
  9using System.IO;
 10using System.Text.RegularExpressions;
 11
 12namespace VOA
 13{
 14    public delegate void DelegateProgressBarPerformStep(long i);
 15    public partial class Form1 : Form
 16    {
 17        public DelegateProgressBarPerformStep DelegateProgressBarPerformStep;
 18        long iConLength;
 19        public Form1()
 20        {
 21            InitializeComponent();
 22        }

 23
 24        public void ProgressBarPerformStep(long i)
 25        {
 26            this.Text = "Processing" + string.Format("Finished:  {0} / {1}", i , iConLength);
 27        }

 28
 29        private void btnGetList_Click(object sender, EventArgs e)
 30        {
 31            GetList(textBox1.Text);
 32        }

 33
 34        private void button1_Click(object sender, EventArgs e)
 35        {
 36            DownLoad(listView1.SelectedItems[0].SubItems[1].Text, listView1.SelectedItems[0].Text);
 37        }

 38
 39        private void GetList(string strUrl)
 40        {
 41            string strHtml = String.Empty;
 42            HttpWebRequest rt = null;
 43            HttpWebResponse rs = null;
 44            Stream stream = null;
 45            StreamReader sr = null;
 46            string temp = string.Empty;
 47
 48
 49            try
 50            {
 51                rt = (HttpWebRequest)WebRequest.Create(strUrl);
 52                rs = (HttpWebResponse)rt.GetResponse();
 53                stream = rs.GetResponseStream();
 54                sr = new StreamReader(stream, Encoding.UTF8);
 55                strHtml = sr.ReadToEnd();
 56            }

 57            catch (Exception ee)
 58            {
 59                MessageBox.Show("发生异常" + ee.Message);
 60            }

 61            finally
 62            {
 63                sr.Close();
 64                stream.Close();
 65                rs.Close();
 66            }

 67
 68            string regexStr = "";
 69            int counter = 0;
 70            int i = 0;
 71            string strKey = "";
 72            string strText = "";
 73            try
 74            {
 75                regexStr = @"\<a href=.*\w{4}\-\w{2}\-\w{2}";
 76                temp = "";
 77                counter = 0;
 78                MatchCollection mc = Regex.Matches(strHtml, regexStr);
 79                counter = mc.Count;
 80                for (i = 0; i < counter; ++i)
 81                {
 82                    temp = mc[i].ToString();
 83                    strKey = temp.Substring(913);
 84                    strKey = "http://bulo.hjenglish.com" + strKey;
 85                    int itemp = temp.IndexOf("【慢速VOA】");
 86
 87                    strText = temp.Substring(itemp);
 88                    listView1.Items.Add(strText);
 89                    listView1.Items[i].SubItems.Add(strKey);
 90                }

 91                mc = null;
 92            }

 93            catch (Exception ee)
 94            {
 95                MessageBox.Show(ee.Message);
 96            }

 97        }

 98
 99        private void DownLoad(string strUrl, string strFile)
100        {
101            string strHtml = String.Empty;
102            HttpWebRequest rt = null;
103            HttpWebResponse rs = null;
104            Stream stream = null;
105            StreamReader sr = null;
106            string temp = string.Empty;
107
108
109            try
110            {
111                rt = (HttpWebRequest)WebRequest.Create(strUrl);
112                rs = (HttpWebResponse)rt.GetResponse();
113                stream = rs.GetResponseStream();
114                sr = new StreamReader(stream, Encoding.UTF8);
115                strHtml = sr.ReadToEnd();
116            }

117            catch (Exception ee)
118            {
119                MessageBox.Show("发生异常" + ee.Message);
120            }

121            finally
122            {
123                sr.Close();
124                stream.Close();
125                rs.Close();
126            }

127
128            string regexStr = "";
129            int counter = 0;
130            int i = 0;
131
132            GetMP3
151
152            try
153            {
154                regexStr = @"参考答案:.*";
155                temp = "";
156                counter = 0;
157                MatchCollection mc = Regex.Matches(strHtml, regexStr);
158                counter = mc.Count;
159                for (i = 0; i < counter; ++i)
160                {
161                    writeTxt(mc[i].ToString(),strFile);
162                }

163                mc = null;
164            }

165            catch (Exception ee)
166            {
167                MessageBox.Show(ee.Message);
168            }

169
170            MessageBox.Show("下载完成");
171        }

172
173        private void writeTxt(string strBody,string strFile)
174        {
175            StreamWriter sw;
176            try
177            {
178                sw = File.CreateText(strFile + ".txt");//txt文件会创建到跟目录下的BIN→Debug下
179            }

180            catch
181            {
182                Console.WriteLine("不能创建文件!");
183                return;
184            }

185
186            sw.Write("{0} ",strBody);
187            sw.Close();
188
189        }

190
191        private void downloadMP3(string strUrl,string strFile)
192        {
193            //打开上次下载的文件或新建文件
194            long lStartPos =0;
195            System.IO.FileStream fs;
196            if (System.IO.File.Exists(strFile))
197            {
198                fs= System.IO.File.OpenWrite(strFile);
199                lStartPos=fs.Length;
200                fs.Seek(lStartPos,System.IO.SeekOrigin.Current);   //移动文件流中的当前指针
201            }

202            else
203            {
204                fs = new System.IO.FileStream(strFile, System.IO.FileMode.Create);
205                lStartPos =0;
206            }

207
208            long iFinished = lStartPos;
209
210            //打开网络连接
211            try
212            {
213                System.Net.HttpWebRequest request =(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(strUrl);
214
215                if ( lStartPos>0)
216                    request.AddRange((int)lStartPos);    //设置Range值
217                
218                //向服务器请求,获得服务器回应数据流
219                System.IO.Stream ns= request.GetResponse().GetResponseStream();
220                iConLength = request.GetResponse().ContentLength;
221                byte[] nbytes = new byte[512];
222                int nReadSize=0;
223                nReadSize=ns.Read(nbytes,0,512);
224                
225                while( nReadSize >0)
226                {
227                    iFinished += nReadSize;
228                    fs.Write(nbytes,0,nReadSize);
229                    nReadSize=ns.Read(nbytes,0,512);
230                    //progressBar1.Invoke(this.DelegateProgressBarPerformStep, new object[] { iFinished });
231                }

232                fs.Close();
233                ns.Close();
234
235            }

236            catch(Exception ex)
237            {
238                fs.Close();
239                MessageBox.Show("下载过程中出现错误:"+ex.ToString());
240            }

241        }

242    }

243}

244
posted @ 2007-12-23 17:12  Jeffers Yuan  阅读(557)  评论(3编辑  收藏  举报