Comment vérifier si un fichier existe sur un serveur en utilisant c # et la classe WebClient
Question
Dans mon application, j'utilise la classe WebClient pour télécharger des fichiers d'un serveur Web en appelant simplement la méthode TéléchargerFichier . Maintenant, je dois vérifier si un fichier existe avant de le télécharger (ou au cas où je voudrais juste m'assurer qu'il existe). J'ai deux questions à ce sujet:
- Quel est le meilleur moyen de vérifier si un fichier existe sur un serveur sans transférer trop de données sur le réseau? (C’est un très grand nombre de fichiers que je dois vérifier) ??
- Existe-t-il un moyen d'obtenir la taille d'un fichier distant sans le télécharger?
Merci d'avance!
La solution
WebClient
est assez limité; si vous passez à WebRequest
, vous avez alors la possibilité d'envoyer une demande HTTP HEAD. Lorsque vous émettez la demande, vous devez obtenir une erreur (si le fichier est manquant) ou un WebResponse
avec une propriété ContentLength
valide.
Modifier: Exemple de code:
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);
}
Autres conseils
Lorsque vous demandez un fichier à l'aide de la classe WebClient , l'erreur 404 (fichier introuvable) entraîne une exception. Le meilleur moyen consiste à gérer cette exception et à utiliser un indicateur qui peut être défini pour voir si le fichier existe ou non.
L'exemple de code est le suivant:
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 dans des blocs if respectifs. J'espère que ça aide!