2009-05-06 6 views
19

Dans mon application, j'utilise le WebClient classe pour télécharger des fichiers à partir d'un serveur Web en appelant simplement la méthode DownloadFile. Maintenant, j'ai besoin de vérifier si un certain fichier existe avant de le télécharger (ou au cas où je veux juste m'assurer qu'il existe). J'ai deux questions avec cela:Comment vérifier si un fichier existe sur un serveur en utilisant C# et la classe WebClient

  1. Quelle est la meilleure façon de vérifier si un fichier existe sur un serveur sans transférer beaucoup de données à travers le fil? (Il s'agit d'un très grand nombre de fichiers que je dois vérifier) ​​
  2. Y at-il un moyen d'obtenir la taille d'un fichier distant donné sans le télécharger?

Merci d'avance!

+0

Vous pouvez modifier le titre de votre question pour préciser que vous utilisez WebClient et votre code ne fonctionne pas directement sur le serveur Web. –

+0

L'a fait. Merci pour l'indice. – Mats

+0

Voici un blog post que j'ai écrit à ce sujet dans le passé. Je le mets ici pour de futures recherches ... –

Répondre

39

WebClient est assez limitée; Si vous passez à WebRequest, vous pouvez envoyer une requête HTTP HEAD. Lorsque vous émettez la demande, vous devez soit obtenir une erreur (si le fichier est manquant), soit un WebResponse avec une propriété ContentLength valide.

Edit: Code Exemple:

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); 
} 
+0

Merci pour votre réponse! J'ai vu que je peux obtenir une réponse grâce à la méthode GetResponse(), puis vérifier ContentLength. Mais est-ce que cela vous assure que le fichier entier n'est pas téléchargé? Je ne peux pas trouver un moyen d'envoyer une requête HTTP HEAD. Pourriez-vous me diriger dans la bonne direction? – Mats

+0

@Matthias Créez une demande WebRequest avec WebRequest.Create (uri), puis définissez la propriété "Method" sur "HEAD". – chakrit

+0

Ce que chakrit a dit; aussi, voir l'exemple. –

4

Lorsque vous demandez fichier en utilisant le WebClient classe, l'erreur 404 (fichier introuvable) conduira à une exception. Le meilleur moyen est de gérer cette exception et d'utiliser un drapeau qui peut être défini pour voir si le fichier existe ou non.

Le code exemple se présente comme suit:

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!!!"); 
} 

Vous pouvez mettre votre code respectif si les blocs. J'espère que ça aide!

Questions connexes