2008-11-10 5 views
6

Ich suchte nach etwas wie Server.MapPath im ASP.NET-Bereich, um die Ausgabe von Assembly.GetExecutingAssembly(). CodeBase in einen Dateipfad mit Laufwerksbuchstaben zu konvertieren.Gibt es eine .NET Framework-Methode zum Konvertieren von Datei-URIs in Pfade mit Laufwerkbuchstaben?

Der folgende Code funktioniert für die Testfälle habe ich versucht:

 
private static string ConvertUriToPath(string fileName) 
{ 
    fileName = fileName.Replace("file:///", ""); 
    fileName = fileName.Replace("/", "\\"); 
    return fileName; 
} 

Es scheint, wie sollte es etwas in der .NET Framework sein, die viel besser wäre - ich habe nur nicht in der Lage gewesen, es zu finden.

+0

Scotts Antwort ist, was Sie wollen, aber ich bin aus der Stimmen. – MusiGenesis

Antwort

18

Versuchen Sie, die Uri.LocalPath Eigenschaft zu betrachten.

private static string ConvertUriToPath(string fileName) 
{ 
    Uri uri = new Uri(fileName); 
    return uri.LocalPath; 

    // Some people have indicated that uri.LocalPath doesn't 
    // always return the corret path. If that's the case, use 
    // the following line: 
    // return uri.GetComponents(UriComponents.Path, UriFormat.SafeUnescaped); 
} 
+0

Funktioniert nicht immer. Siehe: http://stackoverflow.com/a/28319367/321013 –

0

Können Sie einfach Assembly.Location verwenden?

+0

Ich kann Assembly.Location nicht verwenden, da es nicht statisch ist und die Methode, von der aus ich den Aufruf ausführen müsste, statisch ist. –

+1

Assembly.Location möglicherweise nicht das, was Sie suchen, aber es ist nicht, weil es eine nicht statische Methode ist. Denken Sie daran, dass Sie ein neues Objekt in einem statischen Element instanziieren können. – akmad

+0

Assembly.Current.Location oder Assembly.GetExecutingAssembly(). Location –

0

Die Position kann sich von der von CodeBase unterscheiden. Zum Beispiel Für Dateien in ASP.NET wird es wahrscheinlich unter c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET aufgelöst. Siehe „Assembly.CodeBase vs. Assembly.Location“ http://blogs.msdn.com/suzcook/archive/2003/06/26/57198.aspx

3

ich auf eine Antwort sah viel, und die beliebteste Antwort wird mit Uri.LocalPath. Aber System.Uri gibt nicht korrekt LocalPath, wenn der Pfad "#" enthält. Details sind here.

Meine Lösung ist:

private static string ConvertUriToPath(string fileName) 
{ 
    Uri uri = new Uri(fileName); 
    return uri.LocalPath + Uri.UnescapeDataString(uri.Fragment).Replace('/', '\\'); 
} 
Verwandte Themen