使用FTP协议列出包含大约2,000,000个文件的目录

时间:2018-07-08 04:49:40

标签: c# linux ftp listdir

我在FTP服务器上的目录大约有2,000,000。该FTP服务器基于Linux。我想列出该目录中的文件(文件名的最后修改日期),但是Filezilla和Core FTP Pro都不能这样做,并且列表操作将失败。我试图使用FTPWebRequest类在C#中编写自己的应用程序并运行ListDirectory方法,但是它也无法列出目录中的文件,并且ftpwebrequest超时。
是否可以通过任何协议(例如FTP,SMB,...)甚至通过执行bash脚本列出目录中的这么多文件的名称?

在c#中列出目录的功能是:

public static List<string> ListFtpDirectory(string address, string userName, string password)
    {
        List<string> filesName = new List<string>();
        try
        {
            FtpWebRequest request = (FtpWebRequest) WebRequest.Create(address);
            request.Method = WebRequestMethods.Ftp.ListDirectory;
            request.Credentials = new NetworkCredential(userName, password);
            request.UsePassive = true;
            using (FtpWebResponse response = (FtpWebResponse) request.GetResponse())
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                filesName =
                    reader.ReadToEnd().Split(new string[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries).ToList();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        return filesName;
    }

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我不懂C#,但是您没有提供所收到错误的确切文本。

以下是应该在您的环境中运行的Powershell脚本:

let visRect = textView.visibleRect

let layoutManager = textView.layoutManager!
let container = textView.textContainer!

let glyphRange = layoutManager.glyphRange(forBoundingRect: visRect, in: container)
let charRange = layoutManager.characterRange(forGlyphRange: glyphRange, actualGlyphRange: nil)