Ruta relativa

Tengo una clase alojada en una carpeta, que en caso de error escribe en un archivo en una subcarpeta de esta carpeta.
Sabes como podria poner algo asi //subcarpeta/archivo.txt en el codigo a la hora de abrir y escribir en el arhivo en vez de poner toda la ruta? Es decir en vez de poner c:\..\..\..\Carpeta\subcaperta\archivo.txt

1 respuesta

Respuesta
1
1. ".\Archivo.txt" para escribir en la carpeta bin de tu carpeta de proyecto.
2. "..\Archivo.txt" para escribir en tu carpeta del proyecto.
3. Definete una constante llamada path con la ruta inicial común a tus archivos y luego concatena a tus archivos ese path. ejemplo de vb.net:
public const path as string="c:\turuta\"
.
.
.
dim miarchivo as string=path+"\carpeta\archivo.txt"
Hola de nuevo,
No he conseguido escribir en el archivo.
Si la clase desde la que escribo en el archivo esta en la misma carpeta que el archivo seria:
@".\arhivo.txt" no?
La @ es pq estoy con c# para evitar poner \\
Gracias
Si, lo hago desde un wemethod.
El proyecto es un servicio web que tengo alojado en c:\inetpub\wwwroot\miservicioweb
Los clientes web q lo utilicen lo veran como http://192.168.1.2/miservicioweb/miservicioweb.asmx
En el proyecto tengo una clase Error.cs que es la que escribe en el fichero
Cuando ocurre un error, el webmethod en el que sucede el error instancia la clase Error.cs pasándole la excepción y la clase se ocupa de escribir en el fichero.
Cuando la ruta del fichero se la digo entera, es decir, c:\inetpub\wwwroor\miservicioweb\errorLog.log
funciona bien
pero cuando intento algo como lo del getCurrentDirectory o ./ intenta escribir en c:\windows\system32\inetsrv.
Espero haberte dejado claro el problema
Muchas gracias
Saludos
Perfecto tío!
Muchas gracias por todo!
Saludos
Manuel
Hola, te escribo exactamente lo que hago:
logStream = new FileStream("c:\\inetpub\\wwwroot\\servicio\\logError.log", FileMode.Append, FileAccess.Write)
De esa forma me va bien, pero lo que no quiero es pasarle una ruta así, ya que esta aplicación luego estará en otros ordenadores que no tienen porque tener esa ruta, entonces me gustaría que escribiera en el fichero logError.log que se encuentra en la misma carpeta que la clase que tiene el código que he escrito.
Gracias
Un saludo
Manuel
Claro, eso te pasa porque lo haces desde un webmethod, ¿no?
No habría problema si lo hicieras desde una aplicación para windows, pero al ser un servicio web lo que lanzas, es un proceso el que está escuchando si le llaman a tu web method y por tanto se lanza desde c:\windows\system32 el proceso que atiende la petición del webmethod, no sé si me sigues... ¿por tanto tu problema es saber donde instalaste el webmethod o que? Es que el problema está ahí, que no sé lo que quieres hacer realmente... si es un webmethod, se supone que la ubicación dentro de tu disco duro donde lo instales será bien sabida y que no va a cambiar... ilústrame 1 poco más acerca de donde tienes corriendo el servidor, que quieres hacer realmente, etc etc para que pueda ayudarte 1 poco mejor y saber el alcance del problema...
Con "..\\logError.log" debería funcionarte, puesto que yo he hecho pruebas y si que guarda el archivo en la carpeta del proyecto... pero por lo que veo (inetpub\wwwroot\servicio\logError.log) estás trabajando con un servicio web asp.net...
Prueba con lo siguiente:
directory.getcurrentdirectory+"\logError.log"
Hola de nuevo!
no funciona el getCurrentDirectory ya que devuelve esto: "The current directory is distinct from the original directory, which is the one from which the process was started."
En mi caso esto: c:\windows\system32\inetsrv
Necesitaria sacar el original directory
Muchas gracias!
Ahora nos entendemos chaval!
HttpContext.Current.Server.MapPath(".").ToString()

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas