web-dev-qa-db-fra.com

Utilisation de Server.MapPath dans des classes C # externes dans ASP.NET

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é.

125
Chet

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.

290
womp

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

31
Yakir Manor

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.

8
Dan Diplo

J'utilise aussi ça:

System.Web.HTTPContext.Current.Server.MapPath
4
soamazing
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.

4
David McEwing
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 :)

3
Ahmad

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);
3
netuser

Que vous travailliez dans le contexte d'ASP.NET ou non, vous devriez pouvoir utiliser HostingEnvironment.ApplicationPhysicalPath.

1
daudihus

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")
0
Debendra Dash