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.