var request = (FtpWebRequest)WebRequest.Create
("ftp://ftp.domain.com/doesntexist.txt");
request.Credentials = new NetworkCredential("user", "pass");
request.Method = WebRequestMethods.Ftp.GetFileSize;
try
{
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
FtpWebResponse response = (FtpWebResponse)ex.Response;
if (response.StatusCode ==
FtpStatusCode.ActionNotTakenFileUnavailable)
{
//Does not exist
}
}
En règle générale, il est une mauvaise idée d'utiliser des exceptions pour la fonctionnalité dans votre code comme celui-ci, mais dans ce cas, je crois qu'il est une victoire pour le pragmatisme. Appeler la liste sur le répertoire a le potentiel d'être plus inefficace FAR que d'utiliser des exceptions de cette façon.
Si ce n'est pas le cas, sachez que ce n'est pas une bonne pratique!
EDIT: "Ca marche pour moi!"
Cela semble fonctionner sur la plupart des serveurs FTP, mais pas tous. Certains serveurs nécessitent l'envoi de "TYPE I" avant que la commande SIZE ne fonctionne. On aurait pu penser que le problème devrait être résolu comme suit:
request.UseBinary = true;
Malheureusement, il est un par limitation de conception (gros bug de graisse!) À moins que FtpWebRequest est soit le téléchargement ou le téléchargement d'un fichier ne sera pas envoyé « TYPE I ". Voir la discussion et la réponse de Microsoft here.
Je vous recommande d'utiliser le WebRequestMethod suivant à la place, cela fonctionne pour tous les serveurs que j'ai testés, même ceux qui ne retourneraient pas une taille de fichier.
WebRequestMethods.Ftp.GetDateTimestamp
Bonjour, J'ai mis mon utilisateur, mon mot de passe et mon adresse URI. Le fichier existe mais ce code indique qu'il n'existe pas –
Vous êtes vraiment un génie! Il fonctionne comme un charme! –
@ user42467, Y a-t-il une raison de mettre la réponse FtpWebResponse = (FtpWebResponse) request.GetResponse(); à l'intérieur de l'essai, au lieu de simplement request.GetResponse(); – Daniel