我正在尝试使用 FtpWebRequest 来获取公司 FTP 上文件的大小。然而,每当我尝试获得响应时,都会引发异常。请参阅下面代码中的 catch 块中的错误详细信息。
string uri = "ftp://ftp.domain.com/folder/folder/file.xxx";
FtpWebRequest sizeReq = (FtpWebRequest)WebRequest.Create(uri);
sizeReq.Method = WebRequestMethods.Ftp.GetFileSize;
sizeReq.Credentials = cred;
sizeReq.UsePassive = proj.ServerConfig.UsePassive; //true
sizeReq.UseBinary = proj.ServerConfig.UseBinary; //true
sizeReq.KeepAlive = proj.ServerConfig.KeepAlive; //false
long size;
try
{
//Exception thrown here when I try to get the response
using (FtpWebResponse fileSizeResponse = (FtpWebResponse)sizeReq.GetResponse())
{
size = fileSizeResponse.ContentLength;
}
}
catch(WebException exp)
{
FtpWebResponse resp = (FtpWebResponse)exp.Response;
MessageBox.Show(exp.Message); // "The remote server returned an error: (550) File unavailable (e.g., file not found, no access)."
MessageBox.Show(exp.Status.ToString()); //ProtcolError
MessageBox.Show(resp.StatusCode.ToString()); // ActionNotTakenFileUnavailable
MessageBox.Show(resp.StatusDescription.ToString()); //"550 SIZE: Operation not permitted\r\n"
}
但是,当连接到我的个人 FTP 时,此代码确实有效。响应的 StatusDescription 表示该操作“不允许”。难道是我的办公室 FTP 不允许查询文件大小?
我还尝试列出将返回大小的目录详细信息,并注意到我的办公室 FTP 以与我的个人 FTP 不同的格式报告目录详细信息。也许这就是问题所在?
//work ftp ListDirectoryDetails
-rw-r--r-- 1 (?) user 12345 Nov 16 20:28 some file name.xxx
//personal ftp ListDirectoryDetails
-rw-r--r-- 1 user user 12345 Mar 13 some file name.xxx
通过阅读这篇博文,我认为我的个人 ftp 正在返回 Unix 格式的响应,但我的工作正在返回 Windows 格式的响应。也许这无关紧要,但我想我会提到它。