我目前尝试实现一个简单的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>
个文件名,那么我可以完成其余的工作。
答案 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集合并逐个下载每个文件。甚至可能使用一些规则来不下载你不感兴趣的某些类型的文件。我相信你所说的你应该能够做到这一点。
希望这有帮助。