c#とWebClientクラスを使用してサーバーにファイルが存在するかどうかを確認する方法
質問
私のアプリケーションでは、 WebClient クラスを使用して、 DownloadFile メソッドを呼び出すだけでWebサーバーからファイルをダウンロードします。ここで、ダウンロードする前に特定のファイルが存在するかどうかを確認する必要があります(または、そのファイルが存在することを確認するだけの場合)。それに関して2つの質問があります:
- 回線を介して多くのデータに転送せずにファイルがサーバー上に存在するかどうかを確認する最良の方法は何ですか? (チェックする必要がある膨大な数のファイルです)
- 特定のリモートファイルをダウンロードせずにサイズを取得する方法はありますか?
事前に感謝します!
解決
WebClient
はかなり制限されています。 WebRequest
の使用に切り替えると、HTTP HEADリクエストを送信できるようになります。リクエストを発行すると、エラー(ファイルが見つからない場合)が発生するか、有効な ContentLength
プロパティを含む WebResponse
が表示されます。
編集:サンプルコード:
WebRequest request = WebRequest.Create(new Uri("http://www.example.com/"));
request.Method = "HEAD";
using(WebResponse response = request.GetResponse()) {
Console.WriteLine("{0} {1}", response.ContentLength, response.ContentType);
}
他のヒント
WebClient クラスを使用してファイルを要求すると、404エラー(ファイルが見つかりません)により例外が発生します。最良の方法は、その例外を処理し、ファイルが存在するかどうかを確認するために設定できるフラグを使用することです。
サンプルコードは次のようになります。
System.Net.HttpWebRequest request = null;
System.Net.HttpWebResponse response = null;
request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("www.example.com/somepath");
request.Timeout = 30000;
try
{
response = (System.Net.HttpWebResponse)request.GetResponse();
flag = 1;
}
catch
{
flag = -1;
}
if (flag==1)
{
Console.WriteLine("File Found!!!");
}
else
{
Console.WriteLine("File Not Found!!!");
}
それぞれのifブロックにコードを配置できます。 役に立てば幸いです!
所属していません StackOverflow