Ошибка при загрузке файла C#

Мой код:

string dir = "/Users/valeria/Desktop/screening/"+cell;
string remoteUri ="http://www.broadinstitute.org%2Fcmap%2FviewScan.jsp%3Ftype%3DCEL%26scan%3D"+p;
            string pFileName = dir + "/p";

            using (WebClient myWebClient = new WebClient())
            {
                myWebClient.DownloadFile(remoteUri, pFileName);

            }

Моя программа создает файл pFileName, но ничего не загружает, потому что я получаю следующее исключение:

Необработанное исключение: System.Net.WebException: не удалось найти часть пути "/Users/valeria/Projects/screening/screening/bin/Debug/http:/www.broadinstitute.org/cmap/viewScan.jsp?type= CEL&скан=EC2003090503AA". ---> System.IO.DirectoryNotFoundException: не удалось найти часть пути "/Users/valeria/Projects/screening/screening/bin/Debug/http:/www.broadinstitute.org/cmap/viewScan.jsp?type =CEL&сканировать=EC2003090503AA"

Что случилось?


person user2080209    schedule 25.07.2013    source источник
comment
Возможно, вы захотите посмотреть на значение вашей переменной «ячейка».   -  person Adrian Wragg    schedule 26.07.2013
comment
@AdrianWragg с этим все в порядке. Программа создает файл. Ячейка - это просто строка   -  person user2080209    schedule 26.07.2013


Ответы (3)


Экранированный URI определенно не помогает. URL-кодирование обычно используется только тогда, когда кодируемый вами элемент добавляется к URL-адресу; кодирование самого URL-адреса не требуется и может привести к другим проблемам.

Я настоятельно рекомендую изменить

  string remoteUri="http://www.broadinstitute.org%2Fcmap%2FviewScan.jsp%3Ftype%3DCEL%26scan%3D"+p;

to

  string remoteUri ="http://www.broadinstitute.org/cmap/viewScan.jsp?type=CEL&scan="+p;

и повторная попытка.

person Adrian Wragg    schedule 25.07.2013
comment
Здорово! Большое тебе спасибо! - person user2080209; 26.07.2013
comment
@FabianBigler - я прочитал это в первый раз, не волнуйтесь - потом я попытался запустить его в консольном приложении! - person Adrian Wragg; 26.07.2013
comment
@AdrianWragg достаточно честно. Я думал, что это связано с именем файла, потому что ошибка указывала на это. ;) - person Fabian Bigler; 26.07.2013

Переменная ячейка, как указал Адриан Рэгг, неверна.

Ваша ошибка уже указывает на вашу проблему (жирным шрифтом указано то, что находится в вашей переменной ячейки) "/Users/valeria/Projects/screening/screening/bin/Debug/http:/www.broadinstitute.org/cmap/viewScan. jsp?type=CEL&scan=EC2003090503AA"

Поэтому убедитесь, что вы указали правильный путь.

Если вы мне не верите, вы можете проверить свой путь к файлу следующим образом:

If (!System.IO.Directory.Exists(dir))
{
Stop; //<== if it hits here, we are right. ;-)
}
person Fabian Bigler    schedule 25.07.2013
comment
когда я не использую dir и jus, пишу myWebClient.DownloadFile(remoteUri, file.txt); я получаю ту же ошибку - person user2080209; 26.07.2013

В вашем коде две проблемы:

1: вы используете закодированный Uri, поэтому вам нужно декодировать свой Uri с помощью System.Web.HttpUtility:

string decodedUri = HttpUtility.UrlDecode(remoteUri);

Затем вы получите правильный Uri:

http://www.broadinstitute.org/cmap/viewScan.jsp?type=CEL&scan=EC2003090503AA

Что вы должны передать myWebClient:

myWebClient.DownloadFile(decodedUri, pFileName);

2: Ваша переменная cell указывает на URL-адрес, поэтому вам нужно ее исправить. Вы можете назначить его как string.Empty или временно удалить, чтобы проверить, работает ли это решение.

person Dariusz Woźniak    schedule 25.07.2013