私はこのサイトを初めて使用するため、書式設定の誤りがあった場合は事前にお詫び申し上げます。さらに説明が必要な場合はお知らせください。
私は現在、いくつかの http または ftp ソースからファイルをダウンロードすることを目的とした C# のプログラムに取り組んでいます。
いくつかの IP アドレスを通過し、いくつかの方法で既知のファイルを正常にダウンロードできるかどうかを確認します。これらの方法のいずれかでファイルを正常にダウンロードできた場合は、次の IP に移動して同じことを再度実行する必要があります。
これまでのところ、IP を含む配列を実行する foreach ループを使用し、「IPxx」という名前のフォルダーと FTP および HTTP URI を作成しています。これは、どの IP が FTP または HTTP アドレスを必要とするかを事前に知らないためです。
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);
}
これまでのところ、このレベルまでのすべてが期待どおりに機能しています。ただし、いくつかのダウンロード方法を実行し、ファイルを正常にダウンロードできるかどうかを確認する必要があるとすぐに苦労します。そうでない場合は、次のダウンロード方法に移動して同じことを試す必要があります。
次の 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 を実装する方法を知っていますが、もう一度フロー制御に苦労しています。
私はまったくの初心者で、ここから目的の流れを得る方法がわかりません。