FtpWebRequest错误:550 ASCII模式下不允许使用大小

我试图通过匿名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(见上文)并不能解决问题。

不幸的是,我认为你可能会陷入困境。 根据这篇文章 , WebRequestMethods.Ftp类不支持发送除受支持的FTP命令之外的FTP命令 – 对于您的用例,您需要您的客户端之前发送“TYPE I”(用于“图像”或二进制模式)发送SIZE命令。

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