2010-11-14 165 views
11

我想在FTP上获取文件的大小。在C中获取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服务器不支持大小的方法。而不是GetDateTimestamp

回答

22

尝试reqSize.Method = WebRequestMethods.Ftp.GetFileSize; 这为我工作:

+0

比以前更好的意见:他需要从响应读取数据,而不仅仅是获得'ContentLength',我相信。无论哪种方式,内容长度将是0. – 2010-11-14 02:33:09

+0

这是一个复制粘贴错误 - 我更详细地更新了我的问题。 – Jason 2010-11-14 02:34:40

+0

我可以在不下载文件的情况下获得文件大小吗?我只是不想下载这个文件,因为它的巨大,如果它在本地相同的大小。 – Jason 2010-11-14 02:35:33

0

//最简单和有效的方式来获取FTP文件大小。 (新的Uri(“ftpURL”),新的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. 
}