从Web服务器递归列出文件

时间:2011-10-12 21:00:15

标签: c# http list recursion download

我目前尝试实现一个简单的webdownloader,它在整个唯一目录中递归下载文件。

我要列出服务器上的文件: Updater.cs:

    public static List<string> remote_filecheck()
    {
        List<string> rfiles = new List<string>();
        string url = "http://********/patchlist.txt";
        WebClient client = new WebClient();
        client.DownloadFile(url, @"patchlist.txt");

        string line;
        StreamReader reader = new StreamReader("patchlist.txt");

        while ((line = reader.ReadLine()) != null)
        {
            rfiles.Add(line);
        }
        reader.Close();
        return rfiles;
    }

我目前正在使用补丁列表,其中包含指向我的http文件的所有直接链接。

我几乎尝试了网上关于递归下载的每一个片段,例如RegEx,WebRequests和东西。

现在我想知道你是否有一个很好的方法来通过我的HTTP服务器递归并列出所有文件名,这是我想知道的。

如果我有List<string>个文件名,那么我可以完成其余的工作。

1 个答案:

答案 0 :(得分:0)

您尝试获取文件的服务器是否已开启索引?

如果是这样,那么可能需要抓回这个页面然后逐个访问每个网址。

如果没有,那么我不确定它是否可以很容易地完成。

根据以下评论,我想你会想做这样的事情:

        string indexUrl = "http://www.stackoverflow.com";

        WebBrowser browser = new WebBrowser();
        browser.Navigate(indexUrl);

        do
        {
            Application.DoEvents();
        } while (browser.ReadyState != WebBrowserReadyState.Complete);



        var listOfFilePaths = new List<string>();


        foreach (HtmlElement linkElement in browser.Document.GetElementsByTagName("a"))
        {
            var pagePath = linkElement.GetAttribute("href");
            listOfFilePaths.Add(pagePath);
        }

请注意,WebBrowser控件需要在Windows窗体应用程序中运行才能使其工作(轻松)。我使用的indexPath变量应该更改为服务器索引页的路径(我只使用stackoverflow作为示例)。

foreach循环从站点中提取所有锚点(a)标记并获取它们指向的路径,并将它们添加到listOfFilePaths集合中。

一旦此代码完成执行,listOfFilePaths集合将包含索引页面上每个链接的条目,因此链接到服务器上的每个文件。

从这里开始循环listOfFilePaths集合并逐个下载每个文件。甚至可能使用一些规则来不下载你不感兴趣的某些类型的文件。我相信你所说的你应该能够做到这一点。

希望这有帮助。