我是这个网站的新手,所以如果我发现任何格式错误,我会提前道歉。如果需要进一步澄清,请告诉我。
我目前正在开发一个C#程序,旨在从多个http或ftp源代码下载文件。
我希望它通过多个IP地址,然后检查几种方法是否可以成功下载已知文件。如果其中一种方法可以成功下载文件,它应该转到下一个IP并再次执行相同的操作。
到目前为止,我正在使用foreach循环,该循环遍历包含IP的数组并创建名为“IPxx”的文件夹以及FTP和HTTP URI,因为我事先并不知道哪个IP需要FTP或HTTP地址:< / p>
string[] ipArray = new string[4];
ipArray[0]= "xxx.xxx.xxx.xx";
ipArray[1]= "xxx.xxx.xxx.xx";
ipArray[2]= "xxx.xxx.xxx.xx";
ipArray[3]= "xxx.xxx.xxx.xx";
foreach(string ip in ipArray )
{
string ipXx = "IP" + ip.Substring(ip.Length-2);
string ipOrdner = folder + @"\" + ipXx;
Directory.CreateDirectory(ipOrdner);
string ftpAddr= "ftp://" + ip;
string httpAddr= "http://"+ip;
//DownloadTestMethod(httpAddr, ipFolder);
//DownloadTestMethod2(ftpAddr, ipFolder);
//DownloadTestMethod3(htppAddr, ipFolder);
}
到目前为止一切顺利,达到这个水平的一切都按预期工作。 但是,一旦我需要通过几个下载方法并检查是否可以成功下载文件,我就会挣扎,如果没有,它应该转到下一个DownloadMethod并尝试相同。
我想出了以下DownloadTestMethod:
public static void DownloadTestMethod(string httpAddr, string ipFolder)
{
string fileName = "test_10k.bin";
string downloadpath = httpAddr + "/" + fileName;
// I want it to check if the http site is online/working
WebRequest request = WebRequest.Create(downloadpath);
request.Proxy.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response != null)
{
WebClient webClient = new WebClient();
webClient.Proxy.Credentials=CredentialCache.DefaultCredentials;
webClient.DownloadFile(downloadpath, ipFolder + @"\" + fileName);
}
}
它适用于成功下载的文件,但是如果该方法无法下载所请求的文件,我似乎在此方法中“卡住”。 在这种情况下,我希望它跳转到下一个DownloadMethod并再次检查,直到检查完所有方法。
此外,如果程序通过每个IP并且无法下载任何内容,我希望它发送自动电子邮件。我知道如何实现EmailMethod,但我又一次努力控制流量。
我是一个绝对的初学者,不知道如何从这里开始,以获得我想要的流程。
答案 0 :(得分:0)
您可能希望查看Task Parallel Library,特别是其WhenAll()方法。 在它下面,您可能希望查看任何方法返回错误/引发异常的情况下的错误处理。
https://msdn.microsoft.com/en-us/library/dd270695(v=vs.110).aspx