Downloadfile aus dem Internet?
-
20-08-2019 - |
Frage
Ich bin verwirrt mit dem Codeblock unten, weil, warum es herunterlädt, den Inhalt der Webseite und nicht die Datei selbst. Ich schaffe Dummy-Datei mit einigen Texten in es ich es dann herunterladen, aber wenn ich die Download-Datei zu öffnen, ich sehe keinen Text, den ich schrieb, aber es hat seltsame Web-Sprache-Tags.
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;
}
}
Lösung
Ich vermute, myURL
in „/“ endet und nicht „.csv“ Habe ich recht? Denken Sie, dass myURL + CSVFile
den vollständigen Pfad zur Datei enthalten? Es wird nicht. ( Siehe doc ) Die URL muss der Pfad zur Datei sein selbst. Sie dürfen so etwas haben:
client.DownloadFile(@"./file.csv", "filename.txt");
Wenn ich nicht auf dem richtigen Weg bin, bitte sagen Sie, was in der URL und, was einige der ersten paar Tags sind in der heruntergeladenen Datei.
Andere Tipps
Verlangt die Website ein Login und es Umleiten Sie wirklich?
Ich hatte eine vorher musste ich meine Browser-Bewegungen fälschen (und Cookies und solche Speicherung), bevor es mir erlauben würde, eine Datei herunterzuladen, die ich brauchte.
Es tut uns Leid, was bedeutet „die Webseite“ bedeutet in „die Inhalte der Webseite“. Es gibt nur eine URL hier beteiligt, die myURL ist. Hat myURL Punkt in der CSV-Datei direkt? Wenn ja, was bedeutet dann die Inhalte, die Sie empfangen tatsächlich aussehen?
Auch:
if (File.Exists(CSVfile))
downloadOk = true;
else
downloadOk = false;
... ist peinlich. Bitte schreiben Sie:
downloadOk = File.Exists(CSVfile);
Das hat identische Ergebnisse, in 1 Zeile statt 4.
//
if (downloadOk == true)
{
return true;
}
else
{
return false;
}
Das ist noch schlimmer. Die einzige Zeile:
return downloadOk;
... tut genau das Gleiche in 1 Zeile Code statt 7.
Auch die beiden Zeilen in Ausnahmeblock ...
catch (Exception error)
{
downloadOk = false;
string err = error.Message;
}
... absolut nichts tun. downloadOk wird in Ihrem Ausnahmeblock immer falsch sein, und die lokale Variable „err“ wird nie verwendet, bevor es aus dem Geltungsbereich.