6

Assembly.GetExecutingAssembly().CodeBase の出力をドライブ文字付きのファイル パスに変換するために、ASP.NET 領域で Server.MapPath のようなものを探していました。

次のコードは、私が試したテスト ケースで機能します。

プライベート静的文字列 ConvertUriToPath(string fileName)
{
    fileName = fileName.Replace("file:///", "");
    fileName = fileName.Replace("/", "\\");
    ファイル名を返します。
}

.NET Framework にはもっと優れたものがあるはずですが、私はそれを見つけることができませんでした。

4

4 に答える 4

18

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);
}
于 2008-11-10T19:08:54.287 に答える
3

私は多くの答えを探しましたが、最も人気のある答えはUri.LocalPathを使用することです。ただし、パスに「#」が含まれている場合、System.Uri は正しい LocalPath を提供できません。詳細はこちら

私の解決策は次のとおりです。

private static string ConvertUriToPath(string fileName)
{
   Uri uri = new Uri(fileName);
   return uri.LocalPath + Uri.UnescapeDataString(uri.Fragment).Replace('/', '\\');
}
于 2012-02-22T22:48:03.373 に答える
0

場所は CodeBase とは異なる場合があります。たとえば、ASP.NET のファイルの場合、c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET で解決される可能性があります。「Assembly.CodeBase と Assembly.Location」を参照してください http://blogs.msdn.com/suzcook/archive/2003/06/26/57198.aspx

于 2009-06-10T07:59:03.067 に答える
0

使えますAssembly.Locationか?

于 2008-11-10T19:01:24.910 に答える