使用webClient.DownloadFileAsync下载并保存文件,无需单击按钮

时间:2014-10-03 22:48:28

标签: c# winforms

我正在编写一个C#Win-forms应用程序,我想以编程方式下载并将文件保存到客户端计算机而无需用户干预。

我发现了一些建议,例如stackoverflow上的这个建议: How to download a file from a website in C#

我尝试使用webClient.DownloadFileAsync方法以及csharp-examples中的建议 http://www.csharp-examples.net/download-files/ 异步下载文件

如果我直接将URL插入Firefox或IE,则会在对话框中显示所需的文件,我需要单击“打开”或“保存”。我希望能够将文件拉下并保存,而无需用户点击任何按钮。

在WinForm中测试时,我确实有一个按钮点击事件。我遇到的问题是,如果我使用webClient.DownloadFileAsync示例,则不会下载任何文件。我还在表单中添加了DownloadFileCompleted和DownloadProgressChanged事件处理程序以及progressBar1。

我在webClient_DownloadFileCompleted中添加了一个MessageBox,消息立即显示但没有下载文件。我已经包含了我迄今为止尝试过的2个样本。我有System.Net,System.IO和System.Diagnostics的使用声明;

使用webClient.DownloadFileAsync,有没有办法下载和保存文件而无需用户点击按钮?感谢。

我试过的第一个例子:

private void btnDownload_Click(object sender, EventArgs e)
{
    WebClient webClient = new WebClient();
    webClient.DownloadFileCompleted += new     AsyncCompletedEventHandler(webClient_DownloadFileCompleted);
    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler

(webClient_DownloadProgressChanged);
    webClient.DownloadFileAsync(new Uri("http://download.my.org/files/media/myFile.pdf"), @"C:
    \mySaveLocation\");
}

我试过的第二个例子:

public void DownloadFile(string urlAddress, string location)
{
    using (webClient = new WebClient())
    {
        webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
        webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);

        //The variable that will be holding the url address (making sure it starts with http://)
        Uri URL = urlAddress.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ? new
          Uri(urlAddress) : new Uri("http://" + urlAddress);

        try
        {
            //Start downloading the file
            webClient.DownloadFileAsync(URL, location);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

我甚至尝试在click事件中调用后一种方法并传入URL的参数并保存位置,但仍然没有下载文件。

我喜欢第二个例子,因为我可以传入不同的URL并保存不同文件的位置。

有人请建议我如何使用webClient代码下载和保存文件,但用户不必与对话框进行交互?一旦文件下载,我就在幕后工作以完成任务。感谢。

1 个答案:

答案 0 :(得分:0)

尝试使用Fiddler捕获下载请求:http://www.telerik.com/fiddler

当您手动下载文件以及在应用程序中下载文件时,查看请求/响应是否有所不同。