我正在使用一个控制台应用程序,该应用程序在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没有时间或是否每个月都会改变的模式。
我可以知道更好的方法吗?
答案 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));
}
}