Pregunta

Estoy confundido con el bloque de código a continuación porque por qué descarga el contenido de la página web en lugar del archivo en sí. Creo un archivo ficticio con algunos textos y luego lo descargo, pero cuando abro el archivo de descarga, no veo ningún texto que haya escrito, pero tiene etiquetas de idioma web extrañas.

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

Solución

Supongo que myURL termina en " / " y no " .csv " Estoy en lo cierto? ¿Estás pensando que myURL + CSVFile contendrá la ruta completa al archivo? No lo hará. ( Ver documento ) La URL debe ser la ruta al archivo sí mismo. Se le permite tener algo como esto:

client.DownloadFile(@"./file.csv", "filename.txt");

Si no estoy en el camino correcto, indique qué hay en la URL y cuáles son algunas de las primeras etiquetas en el archivo descargado.

Otros consejos

¿El sitio requiere un inicio de sesión y realmente lo está redirigiendo?

He tenido uno antes que me obligaba a fingir mis movimientos de navegación (y almacenar cookies y demás) antes de que me permitiera descargar un archivo que necesitaba.

Lo sentimos, ¿qué significa " la página web " significa en " el contenido de la página web " ;. Aquí solo hay una URL, que es myURL. ¿MyURL apunta al archivo CSV directamente? Si es así, ¿cómo se ve realmente el contenido que está recibiendo?

También:

if (File.Exists(CSVfile))
    downloadOk = true;
else
    downloadOk = false;

... es vergonzoso. Por favor escriba:

downloadOk = File.Exists(CSVfile);

Eso tiene resultados idénticos, en 1 línea en lugar de 4.

//
if (downloadOk == true)
{
    return true;
}
else
{
    return false;
}

Eso es aún peor. La línea única:

return downloadOk;

... hace exactamente lo mismo en 1 línea de código en lugar de 7.

Además, ambas líneas en su bloque de excepción ...

catch (Exception error)
{
    downloadOk = false;
    string err = error.Message;
}

... no haces absolutamente nada. downloadOk siempre será falso en su bloque de excepción, y la variable local " err " nunca se usa antes de que salga del alcance.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top