2009-03-30 10 views
11

En ASP.Net existe la carpeta app_data a la que los usuarios no pueden acceder a través de la web. Me gustaría almacenar un archivo en esta carpeta y leer de este archivo usando una clase que tengo en la carpeta App_Code.Acceso al archivo en App_Data desde una clase en la carpeta App_Code

Tenga en cuenta que el directorio de trabajo actual aquí va a ser un directorio como "c: \", "c: \ windows \ system32 \", etc. y no el directorio de la aplicación. Entonces algo como "../App_Data/somefile" no funciona.

Tiene que haber algo simple que pasé por alto sobre cómo acceder a los archivos en la carpeta App_Data programáticamente

¿Cómo puedo hacer esto?

Respuesta

19

Se puede acceder a la carpeta App_Data de este modo:

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

Soy consciente de que esta utiliza t El objeto HttpContext, sin embargo, si está escribiendo este código dentro de un proveedor de Membresía ASP.NET personalizado (algo que he hecho varias veces), no debería tener problemas para usar el objeto HttpContext.

+4

Gracias, esto me llevó al comienzo correcto, opté por el enfoque HttpContext.Current.Server.MapPath ("~/App_Data/myfilenamehere") ya que parecía más legible. – Brian

+0

@Brian - Me alegra que estés listo y en funcionamiento. Sin embargo, consulte este enlace sobre el rendimiento de MapPath frente a PhysicalApplicationPath: http://dotnetperls.com/Content/PhysicalApplicationPath.aspx. Puede no ser un problema si solo se accede ocasionalmente, pero es bueno tener en cuenta las diferencias de rendimiento. – CraigTP

6

Dice que no tiene acceso al objeto de contexto pero no está claro por qué.

Si el código se ejecuta en respuesta a una solicitud de continuación, se puede acceder al contexto como: -

HttpContext.Current 

En su defecto se puede llegar a la ruta física de la raíz de la aplicación mediante: -

HttpRuntime.AppDomainAppPath 
+0

Mi clase está en una capa de datos que no tiene referencias a las bibliotecas web y mvc. ¿Puede esta clase de datos seguir usando App_Data? HttpRuntime y HttpContext hacen que esta clase de persistencia sea consciente de la implementación web. Gracias –

+0

@ one.beat.consumer: Sí, aunque creo que en realidad respondiste tu propia pregunta. – AnthonyWJones

+0

En realidad, no lo acabo de preguntar mal: más claramente, ¿cómo puede mi clase de repositorio escribir en la carpeta de datos de la aplicación sin hacer referencia a 'System.Web' ni a ninguna otra biblioteca web? ¿Hay otros métodos para encaminarse hacia esta carpeta? –

Cuestiones relacionadas