web-dev-qa-db-ja.com

ASP.NETの外部C#クラスでServer.MapPathを使用する

C#クラスの特定のファイルの絶対パスを取得しようとしています。 Server.MapPathはもちろんASPXとそのコードビハインドページに最適ですが、別のクラスファイルには存在しません。 HostingEnvironment.MapPath()を試しましたが、それは相対仮想パスが許可されていないことを訴えます。何かご意見は?

System.Webはすでにインポートされています。

125
Chet

ServerUtilityクラスは、HttpContextのインスタンスとして使用できます。 ASP.Netパイプライン内で実行されることがわかっている環境にいる場合は、次を使用できます。

HttpContext.Current.Server.MapPath()

ただし、System.Webをインポートする必要があります。

290
womp

以下も使用できます。

var path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/myfile.txt")

もし

var path = Server.MapPath("~/App_Data");
var fullpath = Path.Combine(path , "myfile.txt");

アクセスできない

31
Yakir Manor

System.Webへの参照を追加してからServer.MapPathを使用することはできませんか?

編集:最近では HostingEnvironment.MapPath Method を使用することをお勧めします。

これは、仮想パスをサーバー上の物理パスにマップするSystem.Web Assemblyの静的メソッドです。 Itdoes n'tHttpContextへの参照を必要としません。

8
Dan Diplo

私もこれを使用します:

System.Web.HTTPContext.Current.Server.MapPath
4
soamazing
System.Reflection.Assembly.GetAssembly(type).Location

取得しようとしているファイルが型のアセンブリの場所である場合。ただし、ファイルがアセンブリの場所を基準にしている場合は、System.IO名前空間でこれを使用して、ファイルの正確なパスを取得できます。

4
David McEwing
class test
{
public static void useServerPath(string path)
{
   if (File.Exists(path)
{
 \\...... do whatever you wabt
}
else
{
\\.....
}
}

さて、コードビハインドからメソッドを呼び出すとき

例えば ​​:

protected void BtAtualizacao_Click(object sender, EventArgs e)
        {
             string path = Server.MapPath("Folder") + "\\anifile.txt";

            test.useServerPath(path);
}

このようにして、コードはシンプルになり、1つのメソッドで各呼び出しに複数のパスを使用できます:)

3
Ahmad

これは私を助けてくれました

//System.Web.HttpContext.Current.Server.MapPath //        
FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"),
FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
3
netuser

ASP.NETのコンテキスト内で実行しているかどうかに関係なく、HostingEnvironment.ApplicationPhysicalPathを使用できるはずです。

1
daudihus

server.mappath( "")は、aspxページで動作します。クラスファイルから絶対パスを取得する場合は、これを使用する必要があります-

HttpContext.Current.Server.MapPath("~/EmailLogic/RegistrationTemplate.html")
0
Debendra Dash