visual rutas ruta relativas relativa obtener net hacer como carpetas asp archivo .net visual-studio path relative

.net - rutas - ruta relativa carpetas



Rutas relativas en Visual Studio (7)

Agregaría un paso posterior a la compilación que copie el archivo txt en la carpeta de salida de la configuración activa:

xcopy "$(ProjectDir)*.txt" "$(OutDir)"

Hay algunas macros definidas, como " $(ConfigurationName)" , $(ProjectDir)

Estoy trabajando en Visual Studio 2005 y he agregado un archivo de texto que debe analizarse haciendo clic con el botón derecho en el proyecto en el explorador de soluciones y agregando -> nuevo elemento. Esto coloca el archivo .txt en la carpeta del proyecto. El archivo Debug .exe se encuentra en la carpeta / bin / debug.

¿Cómo señalo correctamente el archivo txt desde el código utilizando rutas relativas que se resolverán correctamente al estar dos carpetas atrás, mientras que también resuelvo estar en la misma carpeta después de que se publique la solución?


Puede agregar un evento de creación posterior para copiar el archivo .txt a la carpeta de salida de compilación. Entonces su código puede asumir que el archivo está en la misma carpeta que el ejecutable.


Si entiendo su pregunta correctamente: Seleccione el archivo en el "Explorador de soluciones". En Propiedades -> Copiar al directorio de salida, seleccione "Copiar siempre" o "Copiar si es nuevo". Para la acción de compilación, seleccione "Contenido". Esto copiará el archivo a la carpeta / bin / debug en la compilación. Debería poder referenciarlo desde la raíz del proyecto a partir de ese momento.


Una alternativa para ubicar el archivo en el disco sería incluir el archivo directamente en el ensamblado compilado como un recurso incrustado. Para hacer esto, haga clic derecho en el archivo y seleccione "Recurso incrustado" como la acción de compilación. A continuación, puede recuperar el archivo como una secuencia de bytes:

Assembly thisAssembly = Assembly.GetExecutingAssembly(); Stream stream = thisAssembly.GetManifestResourceStream("Namespace.Folder.Filename.Ext"); byte[] data = new byte[stream.Length]; stream.Read(data, 0, (int)stream.Length);

Puede encontrar más información acerca de los recursos incrustados aquí y aquí .

Si está creando una aplicación para su propio uso, la sugerencia de David Krep es la mejor: simplemente copie el archivo en el directorio de salida. Si está construyendo un ensamblado que será reutilizado o distribuido, entonces la opción de recurso incrustado es preferible porque empaquetará todo en un solo archivo .dll.


Vaya a Propiedades del proyecto -> Propiedades de configuración -> Depuración

Establezca "Directorio de trabajo" en $ (TargetDir)

A continuación, puede hacer una referencia adecuada de su archivo utilizando una ruta relativa en su código (por ejemplo, ".... / foo.xml")


La solución Application.ExecutablePath no funciona para unittest. La ruta de vstesthost.exe será devuelta

System.Reflection.Assembly.GetExecutingAssembly (). La ubicación funcionará, pero proporciona la ruta con el nombre de conjunto incluido.

Entonces esto funciona:
System.Reflection.Assembly.GetExecutingAssembly().Location + "/../" + "fileToRead.txt"

Pero solo :

fileToRead.txt

Funciona también Parece que el directorio de trabajo es el directorio del ensamblaje de ejecución por defecto.


Verifique la clase de aplicación . Tiene varios miembros que se pueden usar para localizar archivos, etc. relativos a la aplicación una vez que se ha instalado.

Por ejemplo, Application.ExecutablePath le dice dónde se encuentra el archivo EXE en ejecución; a continuación, podría utilizar una ruta relativa para encontrar el archivo, por ejemplo .. / .. / FileToBeParsed.txt. Sin embargo, esto supone que los archivos se implementan en la misma estructura de carpetas que la estructura de la carpeta del proyecto, que no suele ser el caso.

Considere propiedades como CommonAppDataPath y LocalUserAppDataPath para localizar los archivos relacionados con la aplicación una vez que se haya implementado un proyecto.