• winform音频播放器(有声小说[凡人修仙传])


    该程序采用多线程的技术及DataGridView单元格扩展的技术

    1.获取下载列表

            private void GetDownList()
            {
                //System.Web.HttpUtility.UrlDecode(解密
                try
                {
                    List<Model.Novel> list = new List<Model.Novel>();
                    WebResponse response = null;
                    StreamReader reader = null;
                    string Result = "";
                    Uri uri = new Uri("请求的有声小说地址");
    
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri.AbsoluteUri);
                    request.Method = "GET";
                    response = request.GetResponse();
                    reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
                    Result = reader.ReadToEnd();
                    var htmlDocument = new HtmlAgilityPack.HtmlDocument();
                    htmlDocument.LoadHtml(Result);
                    var html = htmlDocument.DocumentNode;
                    var title = html.CssSelect("title");
                    foreach (var item in title)
                    {
                        //MessageBox.Show(item.InnerHtml.ToString());
                    }
                    int i = 0;
                    int m = 1;
                    var ul = html.CssSelect("ul");
                    foreach (var item in ul)
                    {
                        if (i == 8)
                        {
                            foreach (var item1 in item.CssSelect("li"))
                            {
                                string no = m < 10 ? "00" + m : m < 100 ? "0" + m : m.ToString();
                                Model.Novel novel = new Model.Novel();
                                novel.Title = "凡人修仙传" + no;//item1.CssSelect("a").ToArray()[0].InnerText;
                                novel.DownDesc = "我要下载";
                                novel.PlayFile = "播放";
                                novel.DownPath = "下载地址/凡人修仙传/凡人修仙传" + no + ".mp3";//item1.CssSelect("a").ToArray()[0].Attributes["href"].Value;
                                list.Add(novel);
                                m++;
                            }
                        }
                        i++;
                    }
                    dgvFileList.DataSource = list;
                }
                catch (Exception ex)
                {
                    WriteError(ex.Message);
                    Application.Exit();
                }
                
            }
    

      

    2.下载文件的代码

    public void DownloadFile(object RowIndex)
     {
                int index = RowIndex.GetDBNULLValue(0);
                string url = dgvFileList.Rows[index].Cells["DownPath"].Value.ToString();
                string filename = lblPath.Text + "\" + dgvFileList.Rows[index].Cells["Title"].Value.ToString() + ".mp3";
                float percent = 0;
                try
                {
                    System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
                    System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
                    long totalBytes = myrp.ContentLength;
                    System.IO.Stream st = myrp.GetResponseStream();
                    System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Create);
                    long totalDownloadedByte = 0;
                    byte[] by = new byte[1024];
                    DateTime StartTime = DateTime.Now;
                    int osize = st.Read(by, 0, (int)by.Length);
                    while (osize > 0)
                    {
                        totalDownloadedByte = osize + totalDownloadedByte;
                        System.Windows.Forms.Application.DoEvents();
                        so.Write(by, 0, osize);
                        osize = st.Read(by, 0, (int)by.Length);
    
                        DateTime EndTime = DateTime.Now;
                        TimeSpan ts = EndTime.Subtract(StartTime);
                        double iSpeed = totalDownloadedByte / ts.TotalSeconds;
                        dgvFileList[3, index].Value = Model.FileOperate.GetAutoSizeString(iSpeed, 2) + "/s";
    
                        percent = (float)totalDownloadedByte / (float)totalBytes * 100;
                        dgvFileList[2, index].Value = percent.GetDBNULLValue(0);
                    }
                    dgvFileList[3, index].Value = "下载完成,耗时" + Math.Round(DateTime.Now.Subtract(StartTime).TotalSeconds, 2) + "s";
                    so.Close();
                    st.Close();
                }
                catch (System.Exception ex)
                {
                    WriteError(ex.Message);
                }
    }

  • 相关阅读:
    Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间
    Mybatis---在控制台打印sql语句
    多线程实现的四种方法
    Restful架构
    maven中的pom配置文件一——spring,mybatis,oracle,jstl,json,文件上传
    spring mvc配置
    spring的事务
    cglib动态代理
    jdk动态代理
    spring总结————AOP面向切面总结
  • 原文地址:https://www.cnblogs.com/WeFly/p/NovelPlayer.html
Copyright © 2020-2023  润新知