在C#中获取FTP上的文件大小

我想在FTP上获取文件的大小。

//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(); 

我尝试了以下但得到550错误。 文件未找到/无法访问。 但是,以下代码有效…

  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(); 

编辑:这对我不起作用的原因是我的FTP服务器不支持SIZE方法。

尝试reqSize.Method = WebRequestMethods.Ftp.GetFileSize; 而不是GetDateTimestamp

这对我有用:

 FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://servername/filepath")); request.Proxy = null; request.Credentials = new NetworkCredential("user", "password"); request.Method = WebRequestMethods.Ftp.GetFileSize; FtpWebResponse response = (FtpWebResponse)request.GetResponse(); long size = response.ContentLength; response.Close(); 

//获取FTP文件大小的最简单有效的方法。

var size = GetFtpFileSize(new Uri(“ftpURL”),new 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. }