【问题标题】:I am trying to list all the files present in the ftp server using c# winforms application我正在尝试使用 c# winforms 应用程序列出 ftp 服务器中存在的所有文件
【发布时间】:2020-11-24 14:30:17
【问题描述】:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUrl);
        request.Method = WebRequestMethods.Ftp.ListDirectory;
        var response = (FtpWebResponse)request.GetResponse();
        Stream rStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(rStream);
        string fileNames = reader.ReadToEnd();
        List<string> ls = fileNames.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();
        for (int i = 0; i < ls.Count; i++)
            Console.WriteLine(ls[i]);

此方法仅列出指定 serverUrl 目录中存在的文件。我想列出 FTP 服务器的所有文件。谁能给我建议?

【问题讨论】:

  • 您正在寻找dir -R ftp 命令(大写的R 很重要)。不知道它在 .net 中是什么,但这就是你想要的。它列出了目录中的所有文件以及所有子目录及其文件
  • 您如何看待递归算法? Ftp.ListDirectory 命令只列出一个文件夹的内容。它还列出了子目录。您也可以使用递归列出子目录中的文件。但是,如果您想不出一种显示路径(包括子目录)的好方法,它可能会变得一团糟。

标签: c# visual-studio winforms ftpwebrequest ftpwebresponse


【解决方案1】:

我在msdn论坛里写过相关代码如:download each file in folder

您可以使用 FtplistFile 方法获取 ftp 服务器中所有文件的列表。

这是我修改的代码示例。

private void button1_Click(object sender, EventArgs e)
    {
        string uri = "ftp://xxx.x.xx.x/";
        string username = "USERNAME";
        string password = "PASSWORD";
        ListFtpDirectory(uri, new NetworkCredential(username, password));

    }

    static void ListFtpDirectory(string url, NetworkCredential credentials)
    {
        WebRequest listRequest = WebRequest.Create(url);
        listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
        listRequest.Credentials = credentials;

        List<string> lines = new List<string>();

        using (WebResponse listResponse = listRequest.GetResponse())
        using (Stream listStream = listResponse.GetResponseStream())
        using (StreamReader listReader = new StreamReader(listStream))
        {
            while (!listReader.EndOfStream)
            {
                string line = listReader.ReadLine();
                lines.Add(line);
            }
        }

        foreach (string line in lines)
        {
            string[] tokens =
                line.Split(new[] { ' ' }, 9, StringSplitOptions.RemoveEmptyEntries);
            string name = tokens[3];
            string permissions = tokens[2];

            if (permissions == "<DIR>")
            {
                Console.WriteLine($"Directory {name}");
                string fileUrl = url + name;
                ListFtpDirectory(fileUrl + "/", credentials);
            }
            else
            {
                Console.WriteLine(url+name);
                Console.WriteLine($"File {name}");
            }
        }
    }

获取文件名:

在ftp中获取文件路径:

【讨论】:

  • 如我所说。这仅列出特定 ftp 目录 url 的文件和目录。我想仅使用 root url 列出所有文件
  • @shashi9915,我已经更新了我的代码,你可以检查它是否适合你。如果不想显示目录名,可以删除代码 Console.WriteLine($"Directory {name}");
  • 谢谢。我找到了另一种列出所有文件的方法,但过程很长,需要很多时间。你的答案好多了。有什么办法可以显示文件的路径???
  • @shashi9915,可以使用代码 Console.WriteLine(url+name);要在 ftp 中获取文件路径,我已经对其进行了编辑。
  • 我试图用这些目录和文件填充树视图。上面代码中的递归函数出现了问题。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多