如何从网站下载.EXE文件?

时间:2014-12-29 13:09:41

标签: c# winforms

我正在编写一个应用程序,我需要从网站下载exe文件。 我正在使用Visual studio express 2008。

我正在使用以下代码。

private void button1_Click(object sender, EventArgs e)
{
    WebClient webClient = new WebClient();
    webClient.DownloadFileAsync(new   Uri("http://example.com/images/def.exe"), @"d:\ac\def.exe");           
}

def.exe被下载到D盘的Ac文件夹中但是是0字节。

我无法理解为什么会这样。

请帮帮我。

2 个答案:

答案 0 :(得分:4)

DownloadFileAsync方法异步运行 ,这意味着它会在下载开始后立即返回。如果您想等待它结束,您必须订阅DownloadFileCompleted事件。

当然,您也可以使用同步方法,如下所示:

webClient.DownloadFile(new Uri("http://example.com/images/def.exe"), @"d:\ac\def.exe");           

答案 1 :(得分:2)

您可以稍微更改一下代码以使其正常工作。 DownloadFileAsync是异步调用,因此可能是您的线程在下载完成之前执行它。

如果使用异步

,则需要附加处理程序以确定下载是否已完成
    [TestMethod]
    public void TestDownload()
    {
        var webClient = new WebClient();
        webClient.DownloadProgressChanged += webClient_DownloadProgressChanged;
        webClient.DownloadFileAsync(new Uri("https://www.telerik.com/downloads/productfiles/btmba/TelerikJustDecompileSetup_2014.3.1021.0.exe"), @"c:\temp\justdecompile.exe");

        // just to show in a Unit Test.. Not required in actual code
        Thread.Sleep(10000); 

        var info = new FileInfo(@"c:\temp\justdecompile.exe");
        Assert.IsTrue(info.Length > 0);
    }

你的处理程序看起来像,

    void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        Debug.WriteLine(String.Format("{0}    downloaded {1} of {2} bytes. {3} % complete...",
                    (string)e.UserState,
                    e.BytesReceived,
                    e.TotalBytesToReceive,
                    e.ProgressPercentage));
    }