2010-11-14 6 views
11

Je veux obtenir la taille d'un fichier sur un FTP.Obtenir la taille du fichier sur un FTP en C#

 //Get File Size 
     reqSize = (FtpWebRequest)FtpWebRequest.Create(new Uri(FtpPath + filePath)); 
     reqSize.Credentials = new NetworkCredential(Username, Password); 
     reqSize.Method = WebRequestMethods.Ftp.GetFileSize; 
     reqSize.UseBinary = true; 
     FtpWebResponse respSize = (FtpWebResponse)reqSize.GetResponse(); 
     long size = respSize.ContentLength; 
     respSize.Close(); 

J'ai essayé ce qui suit mais j'ai une erreur 550. Fichier non trouvé/pas d'accès. Cependant, le code suivant fonctionne ...

   reqTime = (FtpWebRequest)FtpWebRequest.Create(new Uri(FtpPath + filePath)); 
       reqTime.Credentials = new NetworkCredential(Username, Password); 
       reqTime.Method = WebRequestMethods.Ftp.GetDateTimestamp; 
       reqTime.UseBinary = true; 
       FtpWebResponse respTime = (FtpWebResponse)reqTime.GetResponse(); 
       DateTime LastModified = respTime.LastModified; 
       respTime.Close(); 

EDIT: La raison pour laquelle cela ne fonctionne pas pour moi est que mon serveur FTP ne supporte pas la méthode SIZE.

Répondre

22

Essayez reqSize.Method = WebRequestMethods.Ftp.GetFileSize; au lieu de GetDateTimestamp

Cela a fonctionné pour moi:

+0

Meilleur commentaire que les précédents: Il a besoin de lire les données de la réponse, pas seulement obtenir le 'ContentLength', je crois. De toute façon, il semble étrange que la longueur de contenu serait 0. –

+0

C'était une erreur de copier coller - J'ai mis à jour ma question avec beaucoup plus de détails. – Jason

+0

Je peux obtenir la taille du fichier sans télécharger le fichier droit? Je ne veux tout simplement pas télécharger ce fichier, car c'est énorme, si c'est la même taille localement. – Jason

0

// plus simple et efficace d'obtenir FTP Taille du fichier.

var size = GetFtpFileSize (nouveau Uri ("ftpURL"), nouveau NetworkCredential ("nomUtilisateur", "mot de passe"));

public static long GetFtpFileSize(Uri requestUri, NetworkCredential networkCredential) 
{ 
    //Create ftpWebRequest object with given options to get the File Size. 
    var ftpWebRequest = GetFtpWebRequest(requestUri, networkCredential, WebRequestMethods.Ftp.GetFileSize); 

    try { return ((FtpWebResponse)ftpWebRequest.GetResponse()).ContentLength; } //Incase of success it'll return the File Size. 
    catch (Exception) { return default(long); } //Incase of fail it'll return default value to check it later. 
} 
public static FtpWebRequest GetFtpWebRequest(Uri requestUri, NetworkCredential networkCredential, string method = null) 
{ 
    var ftpWebRequest = (FtpWebRequest)WebRequest.Create(requestUri); //Create FtpWebRequest with given Request Uri. 
    ftpWebRequest.Credentials = networkCredential; //Set the Credentials of current FtpWebRequest. 

    if (!string.IsNullOrEmpty(method)) 
     ftpWebRequest.Method = method; //Set the Method of FtpWebRequest incase it has a value. 
    return ftpWebRequest; //Return the configured FtpWebRequest. 
} 
Questions connexes