ytshare 2015-10-15 05:08 采纳率: 50%
浏览 1759
已采纳

【求助】C#使用WebClient并行下载文件,为什么一开始可以下载,下载一会就不能下载了?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;

namespace ParallelPerday
{
class Program
{
static void Main(string[] args)
{
string Start = "2010年1月1日";
string End = "2013年12月31日";
DateTime dtStart = DateTime.Parse(Start);
DateTime dtEnd = DateTime.Parse(End);
int Days = (dtEnd - dtStart).Days + 1;//相隔天数
string aFirstName = args[0].Substring(args[0].LastIndexOf("\") + 1, (args[0].LastIndexOf(".") - args[0].LastIndexOf("\") - 1));//取文件名为以6000,30,或00开头的文件名,不包括后缀,例如600004.txt,只要600004

        Stopwatch watch = new Stopwatch();
        watch.Start();

        Parallel.For(0, Days, i =>
        {
            WebClient webClient = new WebClient();
            webClient.Proxy = null;
            string strPath = "F:\\Stock Data(2303)\\";//下载到本地的路径
            string url = null;
            string sDay = dtStart.AddDays(i).ToString("yyyy-MM-dd"); //获得以2010年1月1日以后的每一天,如2010-1-31
            if (aFirstName.Substring(0, 3).Equals("600") || aFirstName.Substring(0, 3).Equals("601"))
            {
                url = "http://market.finance.sina.com.cn/downxls.php?date=" + sDay + "&symbol=sh" + aFirstName;//下载的网址链接(拼接而成)
                strPath = strPath + "sh" + aFirstName + "\\";
            }
            if (aFirstName.Substring(0, 3).Equals("300") || aFirstName.Substring(0, 2).Equals("00"))
            {
                url = "http://market.finance.sina.com.cn/downxls.php?date=" + sDay + "&symbol=sz" + aFirstName;//下载的网址链接

                strPath = strPath + "sz" + aFirstName + "\\";//下载到本地的路径
            }
                try
                {
                    DirectoryInfo stockDir = Directory.CreateDirectory(strPath + sDay);//创建文件夹
                    string dataDir = stockDir.FullName + "\\data.txt";//下载到本地的路径
                    webClient.DownloadFile(url, dataDir);
                }
                catch (Exception)
                {

                    Console.WriteLine(aFirstName + " " + sDay);
                }
                finally 
                {
                    webClient.Dispose();
                }              

        });        
        watch.Stop();
        Console.WriteLine(string.Format("Normal For Cost Time:{0}", watch.ElapsedMilliseconds));

    }

    public static void WriteStr2FileEnd(String filename, String content)//自动换行写入
    {
        FileStream fsLineNo = new FileStream(@filename, System.IO.FileMode.OpenOrCreate, FileAccess.Write);
        fsLineNo.Seek(fsLineNo.Length, SeekOrigin.Begin);
        StreamWriter swLineNo = new StreamWriter(fsLineNo);
        swLineNo.WriteLine(content);
        swLineNo.Close();
        fsLineNo.Close();
    }

}

}

  • 写回答

2条回答 默认 最新

  • WorldMobile 2015-10-15 05:17
    关注

    如果一开始可以下载,估计和你的网络有关系,试试这个断点续传的代码

    http://biancheng.dnbcw.info/c/43086.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!