每15分钟从变量路径下载一个文件

时间:2015-11-02 15:12:47

标签: c# webclient

我正在使用一个控制台应用程序,该应用程序在Windows调度程序中安排每15分钟运行一次,当运行时使用WebClient从公共网站下载文件。

string Url1 = "http://www2.epa.gov/sites/production/files/" + DateTime.Now.Year + "-" + DateTime.Now.Month.ToString("d2")+ "/rindata.csv";
WebClient webClient = new WebClient();
webClient.DownloadFile(Url1, filename);

上面的代码运行正常,但上面的网址可能会或可能不会每月随机更改,这会导致我的应用程序抛出404 Exception

示例

将网址视为http://www2.epa.gov/sites/production/files/2015-09/rindata.csv,网址的可变部分为2015-09,其中包含有关9月的数据,如果该月有任何数据更改,则可能会在10月更改为2015-10没有时间或是否每个月都会改变的模式。

我可以知道更好的方法吗?

3 个答案:

答案 0 :(得分:0)

要使其每15分钟下载一次,您可以使用计时器,将其间隔设置为15分钟(以毫秒为单位),并将该代码放入勾选中。关于URL的更改,我没有意识到更好的方法。

答案 1 :(得分:0)

听起来URL不一定每个月都会更新,所以如果是这种情况,请不要每15分钟重新评估一次。所以在第一次运行时设置

string Url1 = "http://www2.epa.gov/sites/production/files/" + DateTime.Now.Year + "-" + DateTime.Now.Month.ToString("d2")+ "/rindata.csv";

你必须在配置文件的某个地方保存这个工作值,然后你可以继续重复使用这个值直到它失败,所以每15分钟只运行一次

WebClient webClient = new WebClient();
webClient.DownloadFile(Url1, filename);

而不是再次评估网址。 如果失败,则再次将其重新评估到当前月份。

if (failed)
{
    string Url1 = "http://www2.epa.gov/sites/production/files/" + DateTime.Now.Year + "-" + DateTime.Now.Month.ToString("d2")+ "/rindata.csv";
}

然后覆盖保存的值。

有关保存到设置文件的更多信息: https://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

答案 2 :(得分:0)

我认为日期更改,我可能会从12到1进行向后搜索。由于最新数据是您感兴趣的,更高的月份不返回404将始终是最新鲜的数据。如果你没有其他方法可以知道URL是什么,那么检查404的简单循环就可以了。这是一个非常基本的例子,但概念应该是合理的。

        for (int i = 12; i > 1; i--)
        {
            string folder = string.Format("{0}-{1}", DateTime.Now.Year + "-" + i.ToString().PadLeft(2, '0'));
            string Url1 = "http://www2.epa.gov/sites/production/files/" + folder + "/rindata.csv";
            try
            {
                using (WebClient client = new WebClient())
                {
                    client.DownloadFile(Url1, "/rindata.csv");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(string.Format("404 Error:{0}", Url1));
            }
        }