Wyjątek: „Formaty URI nie są obsługiwane”

89

Mam absolutną ścieżkę lokalną wskazującą na katalog: "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj"

Ale kiedy próbuję wrzucić go do DirectoryInfopamięci, pojawia się wyjątek „Formaty URI nie są obsługiwane”.

Wyszukałem w Google i szukałem SO, ale widzę tylko rozwiązania ze zdalnymi ścieżkami, a nie lokalnymi. Spodziewałbym się jakiejś metody konwersji ...

Howie
źródło

Odpowiedzi:

189
string uriPath =
    "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj";
string localPath = new Uri(uriPath).LocalPath;
Marc Gravell
źródło
3
Ładny! Miałem dokładnie ten sam problem i szukałem go w Google jak szalony, to działało świetnie.
Jeremy Morgan,
Chociaż jest to rozwiązanie, które działa, jest tylko jeden przypadek, w którym zawodzi. Jeśli lokalizacja zawiera znak #, ścieżka lokalna będzie prowadziła tylko do tej pozycji. Np. Jeśli twoja ścieżka to file: /// C: /foo/bar#/test.jpg, otrzymasz C: / foo / bar zamiast tego, co faktycznie chcesz.
DokutoMekki
2
Cześć. Chcę, aby plik był dostępny pod adresem www.xxx.com/sitemap.xml. Ta rzecz działa na localhost, ale na serwerze nie ma takiego katalogu. Jak można to załatwić w takim przypadku?
To pułapka
@ Itatrap Być może szukasz ścieżki Server.MapPath .
Andrew Morton
ale po użyciu twojej ścieżki tworzę więcej folderu wewnątrz i nie tworzę katalogu. spójrz na stackoverflow.com/questions/63493899/ ...
hud
1

Spróbuj tego

ImagePath = "http://localhost/profilepics/abc.png";
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ImagePath);
          HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream receiveStream = response.GetResponseStream();
Hardeep Singh
źródło
0

Rozwiązałem ten sam błąd z Path.Combine (MapPath ()), aby uzyskać fizyczną ścieżkę pliku zamiast http: /// www.

Robert Peter Bronstein
źródło
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
źródło
1
Chociaż ten kod może rozwiązać problem, w tym wyjaśnienie, jak i dlaczego to rozwiązuje problem, naprawdę pomogłoby poprawić jakość twojego posta i prawdopodobnie zaowocowałoby większą liczbą pozytywnych głosów. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a nie tylko osoba, która zapyta teraz. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnień i dać wskazówkę co zastosować ograniczenia i założenia.
Artog,