从 Web 上的 FTP 文件夹(端口 80)获取列表到数组

本文关键字:获取 列表 数组 端口 上的 Web FTP 文件夹 | 更新日期: 2023-09-27 17:56:10

>我正在尝试通过端口 80 将 FTP Web 文件夹中的文件列表获取到数组或列表中,然后下载特定的扩展名,但由于某种原因计数器始终为零。


public void GetFilesFromServer(string url, string extension=".mp3")
{
    List<string> files = new List<string>();
    try
    {
        //Create FTP request
        FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(url);
        request.Method = WebRequestMethods.Ftp.ListDirectory;
        request.Credentials = new NetworkCredential("anonymous", "anonymous");
        request.UsePassive = true;
        request.UseBinary = true;
        request.KeepAlive = false;
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        Stream responseStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);
        while (!reader.EndOfStream)
        {
            files.Add(reader.ReadLine());
        }
        //Clean-up
        reader.Close();
        responseStream.Close(); //redundant
        response.Close();
    }
    catch (Exception)
    {
       // MessageBox.Show("There was an error connecting to the FTP Server");
    }
    //If the list was successfully received, display it to the user
    //through a dialog
    if (files.Count != 0)
    {
        string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DownloadedFiles");
        WebClient wc = new WebClient();
        foreach (string file in files)
        {
            if(file.EndsWith(extension))
                wc.DownloadFile(url+"/"+file, Path.Combine(folderPath, file));
        }
    }
}

我的目标是将所有 .ext 文件放入一个数组中,但我无法获得列表

例如,文件夹是 http://url.com/folder 的。

但它未能请求

检查了解决方案,但它对我不起作用。

从 Web 上的 FTP 文件夹(端口 80)获取列表到数组

FtpWebRequest用于FTP协议。

FTP 协议不使用端口 80。

如果您的 URL 是服务器上文件夹的 HTML 表示形式,则无法使用 FtpWebRequest 进行抓取。你必须解析 HTML。

尽管您最好找到一种使用更可靠的方法(例如使用真正的FTP)访问数据的方法。

MS 文档说 FtpWebRequest 初始化一个新的 WebRequest,并根据这里的文档:https://msdn.microsoft.com/en-us/library/bw00b1dc(v=vs.110).aspx

那么如果URL以"http://"开头,你将得到一个HttpWebRequest而不是一个FtpWebRequest。

这个答案可以解释:通过 http 获取目录列表