C# クラスで特定のファイルの絶対パスを取得しようとしています。 Server.MapPath
もちろん、ASPX とそのコード ビハインド ページではうまく機能しますが、それは別のクラス ファイルには存在しません。を試しHostingEnvironment.MapPath()
ましたが、相対仮想パスが許可されていないと不平を言っています。何かご意見は?
System.Web
はすでにインポートされています。
C# クラスで特定のファイルの絶対パスを取得しようとしています。 Server.MapPath
もちろん、ASPX とそのコード ビハインド ページではうまく機能しますが、それは別のクラス ファイルには存在しません。を試しHostingEnvironment.MapPath()
ましたが、相対仮想パスが許可されていないと不平を言っています。何かご意見は?
System.Web
はすでにインポートされています。
クラスは、ServerUtility
でインスタンスとして使用できますHttpContext
。ASP.Net パイプライン内で実行されることがわかっている環境にいる場合は、次を使用できます。
HttpContext.Current.Server.MapPath()
ただし、インポートする必要がSystem.Web
あります。
次のものも使用できます。
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/myfile.txt")
もしも
var path = Server.MapPath("~/App_Data");
var fullpath = Path.Combine(path , "myfile.txt");
アクセスできない
への参照を追加してからSystem.Web
使用することはできませServer.MapPath
んか?
編集:最近、HostingEnvironment.MapPath
メソッドの使用をお勧めします:
System.Web
仮想パスをサーバー上の物理パスにマップするアセンブリの静的メソッドです。への参照は必要ありませんHttpContext
。
私もこれを使用します:
System.Web.HTTPContext.Current.Server.MapPath
System.Reflection.Assembly.GetAssembly(type).Location
取得しようとしているファイルが型のアセンブリの場所である場合。ただし、ファイルがアセンブリの場所に対して相対的な場合は、これをSystem.IO
名前空間で使用して、ファイルの正確なパスを取得できます。
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つのメソッドで各呼び出しに複数のパスを使用できます:)
ASP.NET のコンテキスト内で実行しているかどうかにかかわらず、HostingEnvironment.ApplicationPhysicalPath を使用できるはずです。