如何从网络,Windows商店应用程序下载文件

时间:2014-04-21 19:23:01

标签: c# windows-runtime windows-store-apps html-agility-pack

我想要做的是通过html寻找href来进行此(http://www.dubstep.net/track/5439)循环。一旦找到#,它就会在#之前获取href url。然后在#之前从该URL下载文件。现在,下面的代码可以完成所有工作直到下载现在我将如何从url t下载文件?

public async void songsLoad()
    {
        var messageDialog = new MessageDialog("1");
        await messageDialog.ShowAsync();
        //use HAP's HtmlWeb instead of WebClient
        var htmlweb = new HtmlWeb();
        // load HtmlDocument from web URL
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc = await htmlweb.LoadFromWebAsync("http://www.dubstep.net/track/5439");
        int i = 0;
        List<string> list = new List<string>();
        //use LINQ API to select all `<a>` having `href` attribute
        var links = doc.DocumentNode
                       .DescendantsAndSelf("a")
                       .Where(o => o.GetAttributeValue("href", null) != null);
        foreach (HtmlNode link in links)
        {

            HtmlAttribute href = link.Attributes["href"];
            if (href != null)
            {
                list.Add(href.Value);
                i++;
                if (href.Value == "#")
                {
                    int t = i - 2;
                    Uri test = new Uri(list[t]);
                    start(test);
                }
            }
        }
    }

下面是将下载我想要的文件的代码,但这是在控制台应用程序中。 我将如何实现这一目标?

 public static void start(Uri t)
    {

        string fileName1 = "t", myStringWebResource = null;

        // Create a new WebClient instance.
        using (WebClient myWebClient = new WebClient())
        {
            myWebClient.DownloadFileCompleted += DownloadCompleted;
            myWebClient.DownloadProgressChanged += myWebClient_DownloadProgressChanged;
            myWebClient.DownloadFileAsync(t, "file.mp3");
        }
    }

1 个答案:

答案 0 :(得分:1)

我通常采用的方式是使用BackgroundDownloader这可能是一种过度杀伤,但如果是简单的html文件,你可以下载一个字符串 - 只需调用

string htmlString = await new HttpClient().GetStringAsync(uri);

...然后您应该可以使用htmlDocument.Load(htmlString);

之类的内容加载它