2009-03-30 13 views
11

In ASP.Net gibt es den Ordner app_data, auf den Benutzer nicht über das Internet zugreifen können. Ich möchte eine Datei in diesem Ordner speichern und aus dieser Datei lesen, indem ich eine Klasse verwende, die ich im Ordner App_Code habe.Zugreifen auf Datei in App_Data aus einer Klasse im Ordner App_Code

Beachten Sie, dass das aktuelle Arbeitsverzeichnis hier ein Verzeichnis wie "c: \", "c: \ windows \ system32 \" usw. und nicht das Anwendungsverzeichnis sein wird. So etwas wie "../App_Data/somefile" funktioniert nicht.

hat es etwas einfacher sein, dass ich auf übersehen, wie Dateien zuzugreifen im Ordner App_Data programmatisch

Wie kann ich das tun?

Antwort

19

können Sie den Ordner App_Data zugreifen wie so:

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

ich weiß, dass diese t verwendet Das HttpContext-Objekt jedoch, wenn Sie diesen Code in einem benutzerdefinierten ASP.NET-Mitgliedschaftsanbieter schreiben (etwas, das ich selbst mehrmals ausgeführt habe), sollten Sie kein Problem mit dem HttpContext-Objekt haben.

+4

Danke, das brachte mich auf den richtigen Start, ich ging für HttpContext.Current.Server.MapPath ("~/App_Data/myfilenahere") Ansatz, wie es besser lesbar schien. – Brian

+0

@Brian - Froh, dass du startklar bist. Sehen Sie sich diesen Link zur Performance von MapPath vs PhysicalApplicationPath an: http://dotnepperls.com/Content/PhysicalApplicationPath.aspx Kann kein Problem sein, wenn nur gelegentlich zugegriffen wird, aber es ist schön, sich der Leistungsunterschiede bewusst zu sein. – CraigTP

6

Sie sagen, Sie haben keinen Zugriff auf Kontext-Objekt, aber es ist unklar, warum das wäre.

Wenn Ihr Code in Antwort auf eine Anfrage läuft, dann können Sie den Kontext zugreifen, wie: -

HttpContext.Current 

Failing, dass Sie an die Wurzel physischen Pfad für die Anwendung erhalten können mit: -

HttpRuntime.AppDomainAppPath 
+0

Meine Klasse befindet sich in einer Datenschicht, die keine Verweise auf die Web- und Mvc-Bibliotheken enthält. Kann diese Datenklasse weiterhin App_Data verwenden? Mit HttpRuntime und HttpContext wird dieser Persistenzklasse die Webbereitstellung bekannt gemacht. Danke –

+0

@ one.beat.consumer: Ja, obwohl ich denke, dass Sie tatsächlich Ihre eigene Frage beantwortet haben. – AnthonyWJones

+0

Nicht wirklich, ich habe es nur schlecht gefragt - deutlicher, wie kann meine Repository-Klasse dann in den App_Data-Ordner schreiben, ohne auf 'System.Web' oder andere Webbibliotheken zu verweisen? Gibt es andere Methoden, um in diesen Ordner zu gelangen? –

Verwandte Themen