J'essaie d'obtenir le chemin absolu de certains fichiers dans une classe C #. Server.MapPath
fonctionne bien sûr pour ASPX et ses pages code-behind, mais cela n'existe pas dans un autre fichier de classe. J'ai essayé HostingEnvironment.MapPath()
, mais cela se plaint que le chemin virtuel relatif n'est pas autorisé. Des pensées?
System.Web
est déjà importé.
La classe ServerUtility
est disponible en tant qu'instance dans votre HttpContext
. Si vous êtes dans un environnement où vous savez qu'il sera exécuté dans le pipeline ASP.Net, vous pouvez utiliser
HttpContext.Current.Server.MapPath()
Vous devrez cependant importer System.Web
.
vous pouvez aussi utiliser:
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/myfile.txt")
si
var path = Server.MapPath("~/App_Data");
var fullpath = Path.Combine(path , "myfile.txt");
est inaccessible
Ne pouvez-vous pas simplement ajouter une référence à _System.Web
_ et ensuite vous pouvez utiliser _Server.MapPath
_?
Edit: De nos jours, je vous recommande d'utiliser la méthode HostingEnvironment.MapPath
:
C'est une méthode statique dans _System.Web
_ Assembly qui mappe un chemin virtuel sur un chemin physique sur le serveur. Cela ne nécessite pas une référence à HttpContext
.
J'utilise aussi ça:
System.Web.HTTPContext.Current.Server.MapPath
System.Reflection.Assembly.GetAssembly(type).Location
SI le fichier que vous essayez d’obtenir est l’emplacement d’assemblage d’un type. Mais si les fichiers sont relatifs à l'emplacement de l'assembly, vous pouvez l'utiliser avec System.IO
namespace pour obtenir le chemin exact du fichier.
class test
{
public static void useServerPath(string path)
{
if (File.Exists(path)
{
\\...... do whatever you wabt
}
else
{
\\.....
}
}
Maintenant, quand vous appelez la méthode depuis codebehind
par exemple :
protected void BtAtualizacao_Click(object sender, EventArgs e)
{
string path = Server.MapPath("Folder") + "\\anifile.txt";
test.useServerPath(path);
}
de cette façon, votre code est trop simple et avec une méthode, vous pouvez utiliser plusieurs chemins pour chaque appel :)
Celui-ci m'a aidé
//System.Web.HttpContext.Current.Server.MapPath //
FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"),
FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
Que vous travailliez dans le contexte d'ASP.NET ou non, vous devriez pouvoir utiliser HostingEnvironment.ApplicationPhysicalPath.
Le server.mappath ("") fonctionnera sur une page aspx, si vous voulez obtenir le chemin absolu d'un fichier de classe, vous devez utiliser ceci -
HttpContext.Current.Server.MapPath("~/EmailLogic/RegistrationTemplate.html")