Ausnahme: "URI-Formate werden nicht unterstützt"


89

Ich habe einen absoluten lokalen Pfad, der auf ein Verzeichnis zeigt: "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj"

Aber wenn ich versuche, es in DirectoryInfoden Ctor zu werfen , erhalte ich die Ausnahme "URI-Formate werden nicht unterstützt".

Ich habe gegoogelt und auf SO geschaut, aber ich sehe nur Lösungen mit entfernten Pfaden, keine lokalen. Ich würde eine Art Konvertierungsmethode erwarten ...

Antworten:


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

3
Nett! Ich hatte genau das gleiche Problem und googelte wie verrückt, das funktionierte großartig.
Jeremy Morgan

Während es eine Lösung ist, die ofc funktioniert, gibt es nur einen Fall, in dem es fehlschlägt. Wenn der Ort ein # enthält, wird der lokale Pfad nur bis zu dieser Position geführt. Wenn Ihr Pfad beispielsweise file: /// C: /foo/bar#/test.jpg ist, erhalten Sie C: / foo / bar anstelle dessen, was Sie tatsächlich möchten.
DokutoMekki

2
Hallo. Ich möchte, dass die Datei unter www.xxx.com/sitemap.xml vorhanden ist. Dieses Ding funktioniert bei localhost, aber auf dem Server gibt es kein solches Verzeichnis. Wie können die Dinge in diesem Fall sortiert werden?
Es ist eine Falle

@ It'satrap Vielleicht suchen Sie nach Server.MapPath .
Andrew Morton

Aber nachdem ich Ihren Pfad verwendet habe, erstelle ich mehr Ordner im Inneren und es wird nicht das Verzeichnis erstellt. werfen Sie
hud vor

1

Versuche dies

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
Während dieser Code die Frage lösen kann, einschließlich einer Erklärung, wie und warum dies das Problem löst, würde dies wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr Up-Votes führen. Denken Sie daran, dass Sie in Zukunft die Frage für die Leser beantworten, nicht nur für die Person, die jetzt fragt. Bitte bearbeiten Sie Ihre Antwort, um Erklärungen hinzuzufügen und anzugeben, welche Einschränkungen und Annahmen gelten.
Artog
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.