Exceção: “formatos URI não são suportados”

89

Tenho um caminho local absoluto apontando para um dir: "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj"

Mas quando tento jogá-lo no DirectoryInfoctor, recebo a exceção "formatos de URI não são suportados".

Pesquisei no Google e procurei SO, mas só vejo soluções com caminhos remotos, não locais. Eu esperaria um método de conversão de algum tipo ...

Howie
fonte

Respostas:

188
string uriPath =
    "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj";
string localPath = new Uri(uriPath).LocalPath;
Marc Gravell
fonte
3
Agradável! Eu tive exatamente o mesmo problema e pesquisei como um louco, funcionou muito bem.
Jeremy Morgan
Embora seja uma solução que funciona muito bem, há apenas um caso em que ela falha. Se o local contiver um #, o caminho local seguirá apenas até essa posição. Por exemplo, se o seu caminho for arquivo: /// C: /foo/bar#/test.jpg então você obterá C: / foo / bar em vez do que você realmente deseja.
DokutoMekki
2
Oi. Quero que o arquivo esteja presente em www.xxx.com/sitemap.xml. Essa coisa está funcionando no localhost, mas no servidor não existe tal diretório. Como as coisas podem ser classificadas nesse caso?
É uma armadilha
@Isatrap Talvez você esteja procurando por Server.MapPath .
Andrew Morton
mas depois de usar seu caminho, estou criando mais pasta dentro e não está criando o diretório. dê uma olhada stackoverflow.com/questions/63493899/…
hud
1

Tente isto

ImagePath = "http://localhost/profilepics/abc.png";
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ImagePath);
          HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream receiveStream = response.GetResponseStream();
Hardeep Singh
fonte
0

Resolvi o mesmo erro com o Path.Combine (MapPath ()) para obter o caminho do arquivo físico em vez do http: /// www.

Robert Peter Bronstein
fonte
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 { }
Badr Bouaichi
fonte
1
Embora este código possa resolver a questão, incluir uma explicação de como e por que isso resolve o problema realmente ajudaria a melhorar a qualidade da sua postagem e provavelmente resultaria em mais votos positivos. Lembre-se de que você está respondendo às perguntas dos leitores no futuro, não apenas da pessoa que está perguntando agora. Por favor edite sua resposta para adicionar explicações e dar uma indicação do que limitações e premissas se aplicam.
Artog de