C#FTP ListDirectoryDetails问题

C#FTP ListDirectoryDetails问题,c#,ftp,C#,Ftp,我试图从包含1000多个文件的目录中读取FTP文件列表 我是这样做的: public static FtpWebRequest GetRequest(string uri) { FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); req.Credentials = new NetworkCredential("login", "p

我试图从包含1000多个文件的目录中读取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(PooledStream 池流)

在 System.Net.ConnectionPool.PutConnection(PooledStream pooledStream,对象拥有对象, Int32 creationTimeout,布尔值 (可重复使用)

在 System.Net.FtpWebRequest.FinishRequestStage(请求阶段 (舞台)

在 System.Net.FtpWebRequest.SyncRequestCallback(对象 (obj)

在 System.Net.FtpWebRequest.RequestCallback(对象 (obj)

在 System.Net.CommandStream.Abort(异常 (e)

在 System.Net.CommandStream.checkcontinuEpiLine()

在 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()上

有人知道发生了什么事吗

问候 RhinoSoft(FTP软件Serv-U的制造商)的Marcin:

“可发送451回复代码以响应启动文件传输的任何命令。这是一个短暂的负响应,这意味着错误条件是暂时的。它通常是为了响应服务器在处理正在传输或接收的数据时遇到意外的本地错误而发送的。在这种情况下,建议客户端重新启动FTP事务并重试。“

因此,这可能是软件与FTP服务器之间的通信问题,而不一定是软件本身的问题


增加
FtpWebRequest
Timeout
属性的长度不会有什么坏处,但根据我的研究,这不太可能是原因。

它适用于数量较少的文件吗?是的,它适用于数量较少的文件。你知道吗?这种“临时”问题每次都会发生。可能有一些标志在管理员必须设置的服务器上?我针对包含2000个文件的FTP服务器测试了您的代码。不幸的是,该错误相当普遍,它是在FTP服务器上生成的,而不是在您的软件中生成的。您最好与服务器所有者合作。您对标准FTP客户端有任何问题吗?da中的最后一个问题rk:尝试将req.USEANSACTIVE转换为“false”。