DownloadFile a partir da Internet?
-
20-08-2019 - |
Pergunta
Eu estou confuso com o bloco de código abaixo, porque por isso que transfere o conteúdo da página em vez do arquivo em si. I criar arquivo fictício com alguns textos nele então eu baixá-lo, mas quando eu abrir o arquivo de download, não vejo qualquer texto que eu escrevi, mas tem linguagem tags web estranhas.
private bool DownloadCSVfile()
{
bool downloadOk = false;
WebClient client = null;
try
{
client = new WebClient();
client.Credentials = CredentialCache.DefaultCredentials;
client.DownloadFile(myURL, CSVfile);
if (File.Exists(CSVfile))
downloadOk = true;
else
downloadOk = false;
}
catch (Exception error)
{
downloadOk = false;
string err = error.Message;
}
//release resource
if (client != null)
{
client.Dispose();
client = null;
}
//
if (downloadOk == true)
{
return true;
}
else
{
return false;
}
}
Solução
Eu estou supondo extremidades myURL
em "/" e não ".csv" estou certo? Você está pensando que myURL + CSVFile
irá conter o caminho completo para o arquivo? Ele não vai. ( Ver doc ) O URL tem que ser o caminho para o arquivo em si. Você está autorizado a ter algo como isto:
client.DownloadFile(@"./file.csv", "filename.txt");
Se não estou no caminho certo, por favor diga o que está na URL eo que alguns dos primeiros várias marcas estão no arquivo baixado.
Outras dicas
O site requer um login e é realmente redirecionando você?
Eu tive um antes que obrigava-me a fingir meus movimentos de navegação (e armazenar cookies e tal) antes que ele me permita baixar um arquivo que eu precisava.
Desculpe, o que significa "a página da Web" significa em "o conteúdo da página da Web". Há apenas uma URL envolvidos aqui, que é myURL. Será que ponto myURL para o arquivo CSV diretamente? Se sim, então o que é que o conteúdo que você está recebendo realmente se parece?
Além disso:
if (File.Exists(CSVfile))
downloadOk = true;
else
downloadOk = false;
... é constrangedor. Por favor, escreva:
downloadOk = File.Exists(CSVfile);
Isso tem resultados idênticos, em 1 linha em vez de 4.
//
if (downloadOk == true)
{
return true;
}
else
{
return false;
}
Isso é ainda pior. A única linha:
return downloadOk;
... faz exatamente a mesma coisa em uma linha de código em vez de 7.
Além disso, ambas as linhas em seu bloco de exceção ...
catch (Exception error)
{
downloadOk = false;
string err = error.Message;
}
... não fazer absolutamente nada. downloadOk será sempre falsa em seu bloco de exceção, ea variável "err" local nunca é usada antes de ele ficar fora do escopo.