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 ...

Howie
quelle

Antworten:

188
string uriPath =
    "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj";
string localPath = new Uri(uriPath).LocalPath;
Marc Gravell
quelle
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();
Hardeep Singh
quelle
0

Ich habe den gleichen Fehler mit Path.Combine (MapPath ()) behoben, um den physischen Dateipfad anstelle des http: /// www zu erhalten.

Robert Peter Bronstein
quelle
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
quelle
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