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
Method を使用することをお勧めします。
これは、仮想パスをサーバー上の物理パスにマップするSystem.Web
Assemblyの静的メソッドです。 Itdoes n'tは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つのメソッドで各呼び出しに複数のパスを使用できます:)
これは私を助けてくれました
//System.Web.HttpContext.Current.Server.MapPath //
FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"),
FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
ASP.NETのコンテキスト内で実行しているかどうかに関係なく、HostingEnvironment.ApplicationPhysicalPathを使用できるはずです。
server.mappath( "")は、aspxページで動作します。クラスファイルから絶対パスを取得する場合は、これを使用する必要があります-
HttpContext.Current.Server.MapPath("~/EmailLogic/RegistrationTemplate.html")