2010-11-14 7 views
11

Ich möchte die Größe einer Datei auf einem FTP erhalten.Abrufen der Dateigröße auf einem FTP in 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(); 

Ich habe Folgendes versucht, aber einen Fehler 550 bekommen. Datei nicht gefunden/kein Zugriff Jedoch ist der folgende Code funktioniert ...

   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: Der Grund dafür ist nicht für mich zu arbeiten, ist, dass mein FTP-Server nicht die Größe Methode nicht unterstützt.

Antwort

22

Versuchen reqSize.Method = WebRequestMethods.Ftp.GetFileSize; statt GetDateTimestamp

Das ist für mich gearbeitet:

+0

Bessere Kommentar als zuvor: Er muss die Daten aus der Antwort lesen, nicht nur die 'ContentLength', glaube ich. Wie auch immer, es scheint seltsam, dass die contentlength 0 wäre. –

+0

Das war ein Copy Paste-Fehler - ich aktualisierte meine Frage mit viel mehr Details. – Jason

+0

Ich kann die Dateigröße erhalten, ohne die Datei richtig herunterzuladen? Ich möchte diese Datei einfach nicht herunterladen, da sie riesig ist, wenn sie lokal gleich groß ist. – Jason

0

// Einfachste und effiziente Art und Weise FTP Dateigröße zu erhalten.

var size = GetFtpFileSize (neues Uri ("ftpURL"), neues NetworkCredential ("userName", "password"));

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. 
} 
Verwandte Themen