2009-03-30 9 views
11

Dans ASP.Net, le dossier app_data n'est pas accessible aux utilisateurs via le Web. Je voudrais stocker un fichier dans ce dossier et lire à partir de ce fichier en utilisant une classe que j'ai dans le dossier App_Code. Gardez à l'esprit que le répertoire de travail actuel va être un répertoire tel que "c: \", "c: \ windows \ system32", etc. et non pas le répertoire de l'application. Donc quelque chose comme "../App_Data/somefile" ne fonctionne pas.Accès à un fichier dans App_Data à partir d'une classe du dossier App_Code

Il doit y avoir quelque chose de simple que je négligé sur la façon d'accéder à des fichiers dans le dossier App_Data programatically

Comment puis-je faire cela?

Répondre

19

Vous pouvez accéder au dossier App_Data comme ceci:

string appdatafolder = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, "App_Data"); 

Je me rends compte que cela utilise t L'objet HttpContext, cependant, si vous écrivez ce code dans un fournisseur d'appartenance ASP.NET personnalisé (ce que j'ai fait moi-même un certain nombre de fois), vous ne devriez avoir aucun problème à utiliser l'objet HttpContext.

+4

Merci, cela m'a permis de bien démarrer, j'ai choisi l'approche HttpContext.Current.Server.MapPath ("~/App_Data/myfilenamehere") car elle semblait plus lisible. – Brian

+0

@Brian - Je suis content que vous soyez opérationnel. Voir ce lien, cependant, en ce qui concerne les performances de MapPath vs PhysicalApplicationPath: http://dotnetperls.com/Content/PhysicalApplicationPath.aspx Peut ne pas être un problème si seulement accéder à l'occasion, mais agréable d'être conscient des différences de performance. – CraigTP

6

Vous dites que vous n'avez pas accès à l'objet de contexte mais vous ne savez pas pourquoi.

Si votre code est exécuté en réponse à une demande, vous pouvez accéder au contexte que: -

HttpContext.Current 

A défaut, vous pouvez obtenir le chemin physique de racine pour l'application à l'aide: -

HttpRuntime.AppDomainAppPath 
+0

Ma classe se trouve dans une couche de données qui ne contient aucune référence aux bibliothèques web et mvc. Cette classe de données peut-elle toujours utiliser App_Data? HttpRuntime et HttpContext rendent cette classe de persistance consciente du déploiement Web. Merci –

+0

@ one.beat.consumer: Oui, bien que je pense que vous avez réellement répondu à votre propre question. – AnthonyWJones

+0

Pas vraiment, je l'ai juste mal posé - plus clairement, comment ma classe de référentiel peut-elle écrire dans le dossier App_Data sans faire référence à 'System.Web' ou à toute autre bibliothèque Web? Existe-t-il d'autres méthodes pour accéder à ce dossier? –

Questions connexes