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

How to download an .exe file successfully in C#?

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

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

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

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

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

编辑: 托管站点 (000webhost) 阻止 .exe 文件下载...

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

要么使用同步方法:

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

或者使用新的异步等待方法:

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();

WebClient.DownloadFileAsync uses an Event-based Asynchronous Pattern and, as any XXXAsync WebClient that predates async-await, requires subscribing to a XXXCompleted event. So, in the case of DownloadFile the DownloadFileCompleted需要订阅等待下载完成

随着 async-await 的出现,Task-based Asynchronous Pattern (TAP) 也随之而来。通常,TAP 方法的后缀为 Async,但由于 class 中已经有 Async 后缀的成员,第二条规则适用并且方法后缀 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");
    }
}

感谢您的回答...

无论如何,我发现我无法真正从我托管网站 (000webhost) 的地方下载 .exe 文件,因为它被阻止了(我认为出于安全原因)。

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