如何在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 文件夹中,然后上传它,这样我才能成功下载它...
我正在尝试使用以下代码下载 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 文件夹中,然后上传它,这样我才能成功下载它...