C# FTP ListDirectoryDetails Problem
本文关键字:Problem ListDirectoryDetails FTP | 更新日期: 2023-09-27 17:58:41
我试图从包含1000多个文件的direcotry中读取FTP中的文件列表。
我是这样做的:
public static FtpWebRequest GetRequest(string uri)
{
FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
req.Credentials = new NetworkCredential("login", "password");
req.KeepAlive = false;
req.UseBinary = false;
req.UsePassive = true;
return req;
}
public static bool CheckConnection()
{
FtpWebResponse respSize = null;
try
{
FtpWebRequest reqFTP = GetRequest(@"ftp://myftp.com");
reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
respSize = (FtpWebResponse)reqFTP.GetResponse();
respSize.Close();
respSize = null;
reqFTP.GetResponse().Close();
return true;
}
catch (Exception ex)
{
//...
}
finally
{
if (respSize != null)
respSize.Close();
}
return false;
}
我得到一个错误:
远程服务器返回错误:
(451)处理中的本地错误。
在System.Net.FtpWebRequest.SyncRequestCallback(对象obj)
在System.Net.FtpWebRequest.RequestCallback(对象obj)
在System.Net.CommandStream.Dispose(布尔值处置)
在System.IO.Stream.Close()
在System.IO.Stream.Dispose()
在System.Net.ConnectionPool.Destroy(PooledStreampooledStream)
在System.Net.ConnectionPool.PutConnection(PooledStreampooledStream,Object owningObject,Int32 creationTimeout,布尔值canReuse)
在System.Net.FtpWebRequest.FinishRequestStage(RequestStage阶段)
在System.Net.FtpWebRequest.SyncRequestCallback(对象obj)
在System.Net.FtpWebRequest.RequestCallback(对象obj)
在System.Net.CommandStream.Artrt(异常e)
在System.Net.CommandStream.CheckContinuePipeline()
在System.Net.FtpWebRequest.DataStreamClosed(CloseExState关闭状态)
在System.Net.FtpDataStream.System.Net.ICloseEx.CloseEx(CloseExState关闭状态)
在System.Net.FtpDataStream.Dispose(布尔处置)
在System.IO.Stream.Close()
在System.Net.FtpWebResponse.Close()
在CheckConnection()
有人知道发生了什么事吗?
问候Marcin
来自RhinoSoft(FTP软件Serv-U的制造商):
"可以发送451回复代码来响应任何启动文件传输的命令。这是一个短暂的否定响应,意味着错误情况是暂时的。它通常是为了响应服务器在处理传输或接收数据时遇到意外的本地错误而发送的。在这种情况下,鼓励客户端重新启动FTP事务并重试。"[1]
因此,这可能是软件和FTP服务器之间的通信问题,而不一定是软件本身的问题。
增加FtpWebRequest
的Timeout
属性的长度不会有什么害处,但根据我的研究,这不太可能是原因。