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;
        }
    }
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top