【问题标题】:WebRequestMethods.Ftp.ListDirectory result is limited to 2000 entries onlyWebRequestMethods.Ftp.ListDirectory 结果仅限于 2000 个条目
【发布时间】:2016-08-11 15:02:12
【问题描述】:

ListDirectory 发送到 FTP 服务器,但仅从 FTP 返回前 2000 个项目。添加 SSL 并没有返回更多结果。

我应该使用另一个库来获得完整结果吗?

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(OnValidateCertificate);
ServicePointManager.Expect100Continue = true;

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://XXXX");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential("User", "Password");
request.EnableSsl = true;

ServicePoint sp = request.ServicePoint;
Console.WriteLine("ServicePoint connections = {0}.", sp.ConnectionLimit);
sp.ConnectionLimit = 1;

using (var response = (FtpWebResponse)request.GetResponse())
{
    using (var stream = response.GetResponseStream())
    {
        using (var reader = new StreamReader(stream, true))
        {
            string line = reader.ReadLine();
            while (line != null)
            {
                ListFiles.Add(line);
                line = reader.ReadLine();
            }
        }
    }
}

【问题讨论】:

    标签: c# ftp ftpwebrequest ftpwebresponse


    【解决方案1】:

    这显然是服务器上的配置问题。见以下文章:
    http://www.inmotionhosting.com/support/website/general-server-setup/incrrease-file-display-limit
    Viewing more than 10,000 files on a FTP file server?

    基本上,这些文章建议要么更改服务器配置以允许您查看更多文件,要么将文件分类到更窄的目录中,以便您可以在任何给定时间更有选择性地查看要查看的文件。

    【讨论】:

    • 这是主机服务无法更新的服务器上的全局设置。但我可以通过 ssh 获取列表。
    • 您能否更改您的目录结构,使各个目录中的文件少于 2000 个?
    【解决方案2】:

    这几乎不是客户端问题。可能是 FTP 服务器限制了列表。
    您是否尝试过使用独立 (GUI) 客户端?

    正如您所说,您可以通过 SSH 访问服务器,请尝试使用 SFTP 协议而不是 FTP(S)。 SFTP 服务器可能没有限制。

    【讨论】: