2010-11-14 20 views
11

Quiero obtener el tamaño de un archivo en un FTP.Obtener tamaño de archivo en 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(); 

He intentado lo siguiente pero obtengo un error de 550. Archivo no encontrado/sin acceso. Sin embargo, el código siguiente funciona ...

   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 razón de esto no está funcionando para mí es que mi servidor FTP no soporta el método TAMAÑO.

Respuesta

22

Trate reqSize.Method = WebRequestMethods.Ftp.GetFileSize; en lugar de GetDateTimestamp

Esto funcionó para mí:

+0

Mejor comentario que el anterior: Necesita leer los datos de la respuesta, no solo obtener 'ContentLength', creo. De cualquier forma, parece extraño que la longitud de contenido sea 0. –

+0

Eso fue un error de copiar y pegar - Actualicé mi pregunta con mucho más detalle. – Jason

+0

PUEDO obtener el tamaño del archivo sin descargar el archivo ¿verdad? Simplemente no quiero descargar este archivo, ya que es enorme, si es del mismo tamaño localmente. – Jason

0

// Más simple y manera eficaz de obtener Tamaño del archivo de FTP.

var size = GetFtpFileSize (new Uri ("ftpURL"), nuevo NetworkCredential ("nombre de usuario", "contraseña"));

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. 
} 
Cuestiones relacionadas