我正在编写一个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代码下载和保存文件,但用户不必与对话框进行交互?一旦文件下载,我就在幕后工作以完成任务。感谢。
答案 0 :(得分:0)
尝试使用Fiddler捕获下载请求:http://www.telerik.com/fiddler
当您手动下载文件以及在应用程序中下载文件时,查看请求/响应是否有所不同。