Descargar archivo de Internet?
-
20-08-2019 - |
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;
}
}
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.