Eccezione: "I formati URI non sono supportati"


89

Ho un percorso locale assoluto che punta a una directory: "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj"

Ma quando provo a lanciarlo nel DirectoryInfoctor ottengo l'eccezione "I formati URI non sono supportati".

Ho cercato su Google e ho cercato SO, ma vedo solo soluzioni con percorsi remoti, non locali. Mi aspetto un metodo di conversione di qualche tipo ...

Risposte:


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

3
Bello! Ho avuto lo stesso identico problema e ho cercato su Google come un matto, ha funzionato alla grande.
Jeremy Morgan

Sebbene sia una soluzione che funziona ofc, c'è solo un caso in cui fallisce. Se la posizione contiene un #, il percorso locale andrà solo fino a quella posizione. Ad esempio, se il tuo percorso è file: /// C: /foo/bar#/test.jpg, otterrai C: / foo / bar invece di ciò che desideri effettivamente.
DokutoMekki

2
Ciao. Voglio che il file sia presente su www.xxx.com/sitemap.xml. Questa cosa funziona su localhost, ma sul server non esiste tale directory. Come si possono sistemare le cose in quel caso?
È una trappola l'

@ It'satrap Forse stai cercando Server.MapPath .
Andrew Morton

ma dopo aver usato il tuo percorso, sto creando più cartelle all'interno e non sta creando la directory. dai un'occhiata a stackoverflow.com/questions/63493899/…
hud

1

Prova questo

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
Sebbene questo codice possa risolvere la domanda, inclusa una spiegazione di come e perché questo risolve il problema aiuterebbe davvero a migliorare la qualità del tuo post e probabilmente si tradurrebbe in più voti positivi. Ricorda che stai rispondendo alla domanda per i lettori in futuro, non solo alla persona che lo chiede ora. Si prega di modificare la risposta per aggiungere spiegazioni e dare un'indicazione di ciò si applicano le limitazioni e le assunzioni.
Artog
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.