/ / Como baixar um arquivo .EXE de um site? - c #, winforms

Como baixar um arquivo .exe de um site? - c #, winforms

Estou escrevendo um aplicativo em que é necessário baixar um arquivo exe de um site. Estou usando o Visual studio express 2008.

Estou usando o seguinte código.

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

O def.exe é baixado na pasta Ac do drive D, mas é de 0 byte.

Não consigo entender por que isso está acontecendo.

Por favor me ajude.

Respostas:

2 para resposta № 1

Você pode alterar seu código um pouco para fazê-lo funcionar. DownloadFileAsync é uma chamada assíncrona, portanto, pode ser que seu thread o execute, terminando antes que o download seja concluído.

Você precisa anexar um manipulador para descobrir se o download foi concluído se você estiver usando o assíncrono

    [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:tempjustdecompile.exe");

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

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

Seu manipulador pode ser parecido com,

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

4 para resposta № 2

o DownloadFileAsync método é executado de forma assíncrona, ou seja, ele retorna assim que o download é iniciado. Se você quiser esperar até que termine, você tem que se inscrever no DownloadFileCompleted evento.

Claro, você também pode usar o método síncrono, como este:

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