每15分钟从可变路径下载一个文件
本文关键字:一个 文件 下载 15分钟 路径 | 更新日期: 2023-09-27 18:20:17
我正在开发一个控制台应用程序,该应用程序在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);
上面的代码工作得很好,但上面的URL可能会也可能不会每个月都随机更改,这会导致我的应用程序抛出404 Exception
。
示例
将URL视为http://www2.epa.gov/sites/production/files/2015-09/rindata.csvURL的可变部分是2015-09,它包含关于9月的数据,如果该月有任何数据变化,它可能会更改为2015-10,但没有每月何时或是否变化的模式。
我能知道更好的处理方法吗?
要使其每15分钟下载一次,您可以使用计时器,将其间隔设置为15分钟(以毫秒为单位),并将代码放入刻度中。关于URL的更改,我没有想到更好的方法。
听起来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);
而不是再次评估URL。如果失败,则重新评估为当前月份。
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
关于日期更改,我可能会从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));
}
}