如何在C#中成功下载.exe文件?

时间:2015-10-04 09:08:45

标签: c# download async-await webclient-download downloadfileasync

我正在尝试使用以下代码下载test.exe文件:

public void DownloadFile()
{
    using(var client = new WebClient())
    {
         client.DownloadFileAsync(new Uri("http://www.acromix.net16.net/download/test.exe"), "test.exe");
    }
}

使用这个简单的代码,我调试它,这是输出: output

我不知道并且不知道为什么它是0 KB(应该是328 KB)。 [/downloads]

我怎样才能让它发挥作用?

修改  托管站点(000webhost)阻止.exe个文件下载...

3 个答案:

答案 0 :(得分:5)

问题是您使用的是DownloadFileAsync异步版本。要知道下载何时完成,您必须订阅DownloadFileCompleted事件。

使用同步方法:

public void DownloadFile()
{
    using(var client = new WebClient())
    {
        client.DownloadFile(new Uri("http://www.acromix.net16.net/download/test.exe"), "test.exe");
    }
}

或者使用新的async-await方法:

public async Task DownloadFileAsync()
{
    using(var client = new WebClient())
    {
        await client.DownloadFileTaskAsync(new Uri("http://www.acromix.net16.net/download/test.exe"), "test.exe");
    }
}

然后像这样调用这个方法:

await DownloadFileAsync();

答案 1 :(得分:1)

WebClient.DownloadFileAsync使用Event-based Asynchronous Pattern,并且与async - await之前的任何 XXXAsync WebClient一样,需要订阅 XXX已完成 事件。因此,在 DownloadFile 的情况下,应订阅DownloadFileCompleted以等待下载完成。

随着async - await的出现Task-based Asynchronous Pattern (TAP)。通常,TAP方法的后缀是异步,但由于类中已经有异步作为固定成员,因此适用第二条规则并且方法的后缀为 TaskAsync

由于OP使用async - await标记了问题,因此正确的代码为:

public async Task DownloadFileAsync()
{
    using(var client = new WebClient())
    {
         await client.DownloadFileTaskAsync(
            new Uri("http://www.acromix.net16.net/download/test.exe"),
            "test.exe");
    }
}

答案 2 :(得分:0)

感谢您的回答......

无论如何,我发现我无法从我托管网站(000webhost)的地方下载.exe文件,因为它已被屏蔽(出于安全原因,我认为)。< / p>

一种解决方法,首先,我需要将一个.exe文件放到一个zip文件夹中,然后上传它,这样我就可以成功下载...