2008-11-10 7 views
6

Szukałem czegoś takiego jak Server.MapPath w dziedzinie ASP.NET, aby przekonwertować wyjście Assembly.GetExecutingAssembly(). CodeBase do ścieżki pliku z literą dysku.Czy istnieje metoda .NET Framework do konwertowania identyfikatorów URI plików do ścieżek z literami dysku?

Poniższy kod działa dla przypadków testowych próbowałem:

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

wydaje się, że powinno być coś w .NET Framework, że byłoby znacznie lepiej - po prostu nie były w stanie znaleźć to.

+0

Scotta to, co chcesz, ale ja jestem z głosów. – MusiGenesis

Odpowiedz

18

Spróbuj przejrzeć właściwość Uri.LocalPath.

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

Nie zawsze działa. Zobacz: http://stackoverflow.com/a/28319367/321013 –

0

Czy możesz po prostu użyć Assembly.Location?

+0

Nie można użyć Assembly.Location, ponieważ jest niestatyczna, a metoda, z której powinienem wykonać wywołanie, jest statyczna. –

+1

Assembly.Location może nie być tym, czego szukasz, ale to nie dlatego, że jest to metoda niestatyczna. Pamiętaj, że możesz utworzyć nowy obiekt w statycznym elemencie. – akmad

+0

Assembly.Current.Location lub Assembly.GetExecutingAssembly() Lokalizacja –

3

Spojrzałem na odpowiedź dużo, a najpopularniejsza odpowiedź korzysta Uri.LocalPath. Ale System.Uri nie daje poprawnej ścieżki LocalPath, jeśli Ścieżka zawiera "#". Szczegóły to here.

Moje rozwiązanie jest: odpowiedź

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