web-dev-qa-db-ja.com

c#とWebClientクラスを使用してサーバー上にファイルが存在するかどうかを確認する方法

私のアプリケーションでは、WebClientクラスを使用して、DownloadFileメソッドを呼び出すだけでWebサーバーからファイルをダウンロードします。次に、ダウンロードする前に特定のファイルが存在するかどうかを確認する必要があります(または、存在することを確認したい場合)。それについて2つの質問があります。

  1. ネットワークを介して多くのデータを転送せずに、ファイルがサーバー上に存在するかどうかを確認するための最良の方法は何ですか? (チェックする必要のあるファイルの数は非常に多いです)
  2. ダウンロードせずに特定のリモートファイルのサイズを取得する方法はありますか?

前もって感謝します!

20
Mats

WebClientはかなり制限されています。 WebRequestの使用に切り替えると、HTTP HEADリクエストを送信できるようになります。リクエストを発行すると、エラーが発生するはずです(ファイルが欠落)、または有効なWebResponseプロパティを持つContentLength

編集:サンプルコード:

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);
}
41
Tim Robinson

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ブロックに入れることができます。それが役に立てば幸い!

4
Code