Исключение: «Форматы URI не поддерживаются»

89

У меня есть абсолютный локальный путь, указывающий на каталог: "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj"

Но когда я пытаюсь бросить его в DirectoryInfoctor, я получаю исключение «Форматы URI не поддерживаются».

Я погуглил и посмотрел на SO, но я вижу только решения с удаленными путями, а не с локальными. Я бы ожидал какой-то метод преобразования ...

Хауи
источник

Ответы:

189
string uriPath =
    "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj";
string localPath = new Uri(uriPath).LocalPath;
Марк Гравелл
источник
3
Ницца! У меня была такая же проблема, и я погуглил как сумасшедший, это отлично сработало.
Джереми Морган
Хотя это решение, которое работает, есть только один случай, когда оно не работает. Если местоположение содержит символ #, то локальный путь будет идти только до этой позиции. Например, если ваш путь - file: /// C: /foo/bar#/test.jpg, тогда вы получите C: / foo / bar вместо того, что вам действительно нужно.
DokutoMekki
2
Здравствуй. Я хочу, чтобы файл присутствовал на www.xxx.com/sitemap.xml. Эта штука работает на локальном хосте, но на сервере такого каталога нет. Как в таком случае можно рассортировать?
Это ловушка
@ Itatrap Возможно, вы ищете Server.MapPath .
Эндрю Мортон,
но после использования вашего пути я создаю дополнительную папку внутри и не создаю каталог. посмотрите stackoverflow.com/questions/63493899/…
hud
1

Попробуй это

ImagePath = "http://localhost/profilepics/abc.png";
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ImagePath);
          HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream receiveStream = response.GetResponseStream();
Хардип Сингх
источник
0

Я решил ту же ошибку с помощью Path.Combine (MapPath ()), чтобы получить физический путь к файлу вместо http: /// www.

Роберт Питер Бронштейн
источник
0
     string ImagePath = "";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ImagePath);
        string a = "";
        try
        {
            HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
            Stream receiveStream = response.GetResponseStream();
            if (receiveStream.CanRead)
            { a = "OK"; }
        }

        catch { }
Бадр Буаичи
источник
1
Хотя этот код может решить вопрос, в том числе объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, приведет к большему количеству голосов за. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для человека, который задает его сейчас. Пожалуйста , измените свой ответ , чтобы добавить объяснения и дать указание о том , что применять ограничения и допущения.
Artog