137

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

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

4

9 に答える 9

312

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

HttpContext.Current.Server.MapPath()

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

于 2009-07-27T19:41:14.690 に答える
34

次のものも使用できます。

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

もしも

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

アクセスできない

于 2014-03-02T14:47:56.413 に答える
10

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

編集:最近、HostingEnvironment.MapPathメソッドの使用をお勧めします:

System.Web仮想パスをサーバー上の物理パスにマップするアセンブリの静的メソッドです。への参照は必要ありませHttpContext

于 2009-07-27T19:41:31.350 に答える
4

私もこれを使用します:

System.Web.HTTPContext.Current.Server.MapPath
于 2011-07-27T17:01:16.950 に答える
4
System.Reflection.Assembly.GetAssembly(type).Location

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

于 2009-07-27T19:45:55.757 に答える
3
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つのメソッドで各呼び出しに複数のパスを使用できます:)

于 2011-04-14T17:46:04.553 に答える
1

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

于 2015-07-30T21:51:30.310 に答える