Exception: "Les formats URI ne sont pas pris en charge"


89

J'ai un chemin local absolu pointant vers un dir: "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj"

Mais quand j'essaye de le lancer dans DirectoryInfole ctor de, j'obtiens l'exception "Les formats URI ne sont pas supportés".

J'ai cherché sur Google et regardé SO, mais je ne vois que des solutions avec des chemins distants, pas des chemins locaux. Je m'attendrais à une méthode de conversion quelconque ...

Réponses:


189
string uriPath =
    "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj";
string localPath = new Uri(uriPath).LocalPath;

3
Agréable! J'ai eu exactement le même problème et Google comme un fou, cela a très bien fonctionné.
Jeremy Morgan

Bien que ce soit une solution qui fonctionne ofc, il n'y a qu'un cas où elle échoue. Si l'emplacement contient un #, le chemin local ira uniquement jusqu'à cette position. Par exemple, si votre chemin est file: /// C: /foo/bar#/test.jpg alors vous obtiendrez C: / foo / bar au lieu de ce que vous voulez réellement.
DokutoMekki

2
Salut. Je souhaite que le fichier soit présent sur www.xxx.com/sitemap.xml. Cette chose fonctionne chez localhost, mais sur le serveur, il n'y a pas de tel répertoire. Comment les choses peuvent-elles être triées dans ce cas?
C'est un piège

@ It'satrap Vous recherchez peut-être Server.MapPath .
Andrew Morton le

mais après avoir utilisé votre chemin, je crée plus de dossier à l'intérieur et ne crée pas le répertoire. regardez stackoverflow.com/questions/63493899/…
hud

1

Essaye ça

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


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
Bien que ce code puisse résoudre la question, inclure une explication sur comment et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de votre publication et entraînerait probablement plus de votes à la hausse. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, pas seulement à la personne qui la pose maintenant. Veuillez modifier votre réponse pour ajouter des explications et donner une indication des limites et des hypothèses applicables.
Artog
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.