Вопрос
Меня смущает приведенный ниже блок кода, потому что он загружает содержимое веб-страницы, а не сам файл.Я создаю фиктивный файл с некоторыми текстами в нем, затем загружаю его, но когда я открываю загружаемый файл, я не вижу никакого текста, который я написал, но у него есть странные теги веб-языка.
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;
}
}
Решение
Я предполагаю myURL
заканчивается на "/", а не на ".csv", я прав?Ты думаешь, что myURL + CSVFile
будет содержать полный путь к файлу?Этого не произойдет.(Смотрите документ) URL-адрес должен быть путем к самому файлу.Вам разрешено иметь что-то подобное:
client.DownloadFile(@"./file.csv", "filename.txt");
Если я не на правильном пути, пожалуйста, сообщите, что содержится в URL-адресе и какие из первых нескольких тегов есть в загруженном файле.
Другие советы
Требуется ли сайту войти в систему, и он действительно перенаправляет вас?
У меня уже был такой, который требовал, чтобы я подделывал свои перемещения в интернете (и сохранял файлы cookie и тому подобное), прежде чем это позволило бы мне загрузить нужный мне файл.
Извините, что означает "веб-страница" в разделе "содержимое веб-страницы".Здесь задействован только один URL-адрес - myURL.Указывает ли myURL непосредственно на CSV-файл?Если да, то как на самом деле выглядит содержимое, которое вы получаете?
Также:
if (File.Exists(CSVfile))
downloadOk = true;
else
downloadOk = false;
... это смущает.Пожалуйста, напишите:
downloadOk = File.Exists(CSVfile);
Это дает идентичные результаты, в 1 строке вместо 4.
//
if (downloadOk == true)
{
return true;
}
else
{
return false;
}
Это еще хуже.Единственная строка:
return downloadOk;
...делает точно то же самое в 1 строке кода вместо 7.
Кроме того, обе строки в вашем блоке исключений...
catch (Exception error)
{
downloadOk = false;
string err = error.Message;
}
...абсолютно ничего не делайте.downloadOk всегда будет иметь значение false в вашем блоке исключений, а локальная переменная "err" никогда не используется до того, как она выйдет за пределы области видимости.