我试图通过匿名FTP从远程FTP文件中获取文件大小。
public static long GetSize(string ftpPath)
{
try
{
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath));
request.Proxy = null;
request.Credentials = new NetworkCredential("anonymous", "´");
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.GetFileSize;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
long size = response.ContentLength;
response.Close();
return size;
}
catch (WebException e)
{
string status = ((FtpWebResponse)e.Response).StatusDescription;
MessageBox.Show(status);
return 0;
}
}
这当前返回错误" 550 ASCII模式下不允许的大小。"我知道我必须使用二进制模式,但将UseBinary
设置为true(参见上文)并不能解决问题。
答案 0 :(得分:1)
不幸的是,我认为你可能会陷入困境。每WebRequestMethods.Ftp
个request.UseBinary = true
类不支持发送除受支持的FTP命令以外的FTP命令 - 对于您的用例,您需要您的客户端发送" TYPE I" (对于"图像"或二进制模式),在发送SIZE命令之前。
或者,作为一种hacky解决方法,您可以在发送SIZE命令之前尝试下载文件 - 任何文件。使用GetFileSize
请求时,它应该会导致您的客户端发送" TYPE I"命令到FTP服务器。 (如果下载请求失败,则无关紧要; TYPE命令仍然会被发送。)大多数FTP服务器在收到TYPE命令后,假设该TYPE用于后续命令。然后,当您再次尝试Localized.strings
请求时,FTP服务器可能处于二进制,而不是ASCII模式,并且您的SIZE命令可能会成功。