C# FtpWebRequest错误:ASCII模式下不允许550大小

C# FtpWebRequest错误:ASCII模式下不允许550大小,c#,ftp,binary,ascii,ftpwebrequest,C#,Ftp,Binary,Ascii,Ftpwebrequest,我正在尝试通过匿名FTP从远程FTP文件获取文件大小 public static long GetSize(string ftpPath) { try { FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath)); request.Proxy = null; request.Credentials = new NetworkCreden

我正在尝试通过匿名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 Size not allowed in ASCII mode.”我知道我必须使用二进制模式,但将
UseBinary
设置为true(见上文)并不能解决问题。

不幸的是,我认为您可能被卡住了。
WebRequestMethods.Ftp
类per将不支持发送除支持的Ftp命令以外的其他Ftp命令——对于您的用例,您需要您的客户端在发送SIZE命令之前发送“TYPE I”(用于“image”或二进制模式)

或者,作为一种黑客解决方法,您可以尝试在发送SIZE命令之前下载一个文件——任何文件。对于该请求,如果使用
request.UseBinary=true
,则会导致客户端向FTP服务器发送“TYPE I”命令。(如果下载请求失败也无关紧要;TYPE命令仍将被发送。)大多数FTP服务器在收到TYPE命令后,将为后续命令采用该类型。然后,当您再次尝试
GetFileSize
请求时,FTP服务器可能处于二进制模式,而不是ASCII模式,并且您的SIZE命令可能会成功